输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
import java.util.ArrayList;
public class Solution {
public ArrayList Permutation(String str) {
return findPermutationStr(str);
}
private static ArrayList<String> findPermutationStr(Stringstr) {
ArrayList<String> strList= findPermutations(str);
ArrayList<String> strList2 = new ArrayList<String>();
for (int i = 0; i < strList.size(); i++) {
if (!strList2.contains(strList.get(i))) {
strList2.add(strList.get(i));
}
}
String tmpString = null;
// [aabc, abac, abca, aacb, acab, acba, baac, baca, bcaa, caab, caba,
// cbaa]
for (int i = 0; i < strList2.size(); i++) {
for (int j = 0; j < strList2.size() - 1 - i; j++) {
if (compareStr(strList2.get(j), strList2.get(j+1)) >0) {
tmpString = strList2.get(j);
strList2.set(j, strList2.get(j + 1));
strList2.set(j + 1, tmpString);
}
}
}
return strList2;
}
private static ArrayList<String> findPermutations(String str) {
ArrayList<String> strList = new ArrayList<String>();
if (str.length() == 0) {
return strList;
}
if (str.length() == 1) {
strList.add(str);
return strList;
}
if (str.length() == 2) {
char[] chArry = str.toCharArray();
strList.add(str);
if (chArry[0] != chArry[1]) {
String s = new String(new char[] { chArry[1], chArry[0] });
strList.add(s);
}
return strList;
}
ArrayList<String> subStrPermutation敏感词indPermutations(str.substring(1));
char firstChar = str.charAt(0);
for (String s : subStrPermutations) {
String tmpStr = firstChar + s;
strList.add(tmpStr);
char[] charArry = tmpStr.toCharArray();
for (int i = 0; i < tmpStr.length() - 1; i++) {
char t = charArry[i];
charArry[i] = charArry[i + 1];
charArry[i + 1] = t;
strList.add(new String(charArry));
}
}
return strList;
}
static int compareStr(String str1, String str2) {
if (str1.length() != str2.length()) {
return str1.length() > str2.length() ? 1 : -1;
}
for (int i = 0; i < str1.length(); i++) {
if (str1.charAt(i) == str2.charAt(i)) {
continue;
}
return str1.charAt(i) > str2.charAt(i)?1:-1;
}
return 0;
}
}