字符串的排列

来源:互联网 发布:windows iso下载地址 编辑:程序博客网 时间:2024/05/21 17:30

题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

全排列算法:
可参见:

http://blog.csdn.net/randyjiawenjie/article/details/6313729

//Permutationpublic class test {    //vital    ArrayList<String> re = new ArrayList<>();    public static void arrange(String[] str, int st, int len) {        if (st == len-1) {            for (int i = 0; i < len; i++) {                System.out.print(str[i]+" ");            }            System.out.println();            return;        }        else {            for (int i = st; i < len; i++) {                swap(str, st, i);                arrange(str, st+1, len);                swap(str, st, i);            }        }    }    private static void swap(String[] str, int i, int j) {        if (i != j) {            String tmp = str[i];            str[i] = str[j];            str[j] = tmp;        }    }    public ArrayList<String> Permutation(String s) {        String[] str = new String[s.length()];        for (int i = 0; i < s.length(); i++) {            str[i] = s.substring(i, i+1);        }         arrange(str, 0, s.length());         return re;    }    //测试程序    public static void main(String[] args) {        String[] tmp = {"a", "a", "c"};         arrange(tmp, 0, 3);    }}

本题需要,去重复字母

import java.util.*;class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}public class Main {    public static ArrayList<String> Permutation(String str) {        ArrayList<String> list = new ArrayList<>();        if (str == null||str.length() == 0) return list;        HashSet<String> set = new HashSet<>();        change(set, 0, str.toCharArray());        list.addAll(set);        Collections.sort(list);        return list;    }    private static void change(HashSet<String> set, int k, char[] chars) {        if (k == chars.length) {            set.add(new String(chars));            return;        } else {            for (int i = k; i < chars.length; i++) {                swap(chars, k, i);                change(set, k+1, chars);                swap(chars, k, i);            }        }    }    private static void swap(char[] chars, int i, int j) {        if (i != j) {            char tmp = chars[i];            chars[i] = chars[j];            chars[j] = tmp;        }    }    //测试    public static void main(String[] args) {        ArrayList<String> strings = Permutation("abc");        for (String s:strings) {            System.out.println(s);        }    }}
原创粉丝点击