public static String[] permutation(String s) {
if (s == null) {
return new String[0];
}
char[] chars = s.toCharArray();
Set<String> res = new HashSet<>();
baolidigui(chars, 0, res);
String[] strArr = new String[res.size()];
return res.toArray(strArr);
}
private static void baolidigui(char[] chars, int index, Set<String> res) {
if (index == chars.length - 1) {
res.add(String.valueOf(chars));
}
for (int i = index; i < chars.length; i++) {
swap(chars, index, i);
baolidigui(chars, index + 1, res);
swap(chars, i, index);
}
}
private static void swap(char[] chars, int i, int j) {
char a = chars[i];
chars[i] = chars[j];
chars[j] = a;
}
public static String[] permutation(String s) {
if (s == null) {
return new String[0];
}
char[] chars = s.toCharArray();
List<String> res = new ArrayList<>();
fenzhijiexian(chars, 0, res);
String[] strArr = new String[res.size()];
return res.toArray(strArr);
}
private static void fenzhijiexian(char[] chars, int index, List<String> res) {
if (index == chars.length - 1) {
res.add(String.valueOf(chars));
return;
}
boolean[] visit = new boolean[26];
for (int j = index; j < chars.length; j++) {
if (!visit[chars[j] - 'a']) {
visit[chars[j] - 'a'] = true;
swap(chars, index, j);
fenzhijiexian(chars, index + 1, res);
swap(chars, j, index);
}
}
}
private static void swap(char[] chars, int i, int j) {
char a = chars[i];
chars[i] = chars[j];
chars[j] = a;
}