输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
import java.util.*;
public class Main{
private static HashSet hashSet = new HashSet();
private static ArrayList arrayList = new ArrayList();
public static void swap(char[] str,int i,int j){
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
public static void permutation(char[] str,int start,int end){
if(start==end-1){
hashSet.add("\""+String.valueOf(str)+"\"");
}else{
for(int j = start;j<end;j++){
//不同位置的相同字符不交换,避免重复,全排列改良
if(str[start]==str[j]&&start!=j){continue;}
swap(str,start,j);
permutation(str,start+1,end);
swap(str,start,j);
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String input;
sc.useDelimiter("\n");
while(sc.hasNext()){
input = sc.next();
permutation(input.toCharArray(),0,input.length());
if("[\"\"\"\"]".equals(hashSet.toString())){
System.out.println("[]");
}else{
Iterator iterator = hashSet.iterator();
while(iterator.hasNext()){
arrayList.add(iterator.next());
}
Collections.sort(arrayList);
System.out.println(arrayList.toString().replace(", ",","));
}
hashSet.clear();
arrayList.clear();
}
}
}