字符串的排列


/*&输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
*/
import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
   ArrayList<String> list=new ArrayList<String>();

if(str.length()<1)
return list;
else{
HashSet<String> set=new HashSet<String>();
fun(set,str.toCharArray(),0);
list.addAll(set);
Collections.sort(list);
return list;
}
}


private static void fun(HashSet<String> set, char[] chars, int k) {
// TODO Auto-generated method stub
if(k==chars.length) {
set.add(new String(chars) );

}
for(int i=k;i<chars.length;i++) {
reverse(chars,i,k);
fun(set,chars,k+1);
reverse(chars,i,k);
}
}

private static void reverse(char[] chars,int i,int j) {

char temp=chars[i];
chars[i]=chars[j];
chars[j]=temp;
// return newstring;
}

}

posted @ 2018-06-26 19:36  Syiren  阅读(125)  评论(0编辑  收藏  举报