编程实现:给你一个字符串s,输出s能够组成的所有不同的字符串.
如:s="abc",
输出:abc,acb,bac,bca,cba,cab
package DataStructre;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
/**
* 编程实现:给你一个字符串s,输出s能够组成的所有不同的字符串.
* 如:s="abc",
* 输出:abc,acb,bac,bca,cba,cab
*/
public class Ans {
public static void main(String[] args) {
String s = "abc";
String s2 = "abcbe";
List<String> res = permutation(s);
for (int i = 0; i < res.size(); i++) {
System.out.println(i + ": " + res.get(i));
}
System.out.println("=======");
List<String> res2 = permutation(s2);
for (int i = 0; i < res2.size(); i++) {
System.out.println(i + ": " + res2.get(i));
}
}
public static List<String> permutation(String s) {
List<String> res = new ArrayList<>();
char[] c = s.toCharArray();
dfs(c, 0, res);
System.out.println(res);
return res;
}
static void dfs(char[] c, int start, List<String> res) {
if (start == c.length - 1) {
res.add(String.valueOf(c));
return;
}
HashSet<Character> set = new HashSet<>();
for (int i = start; i < c.length; i++) {
if (set.contains(c[i])) continue;
set.add(c[i]);
swap(c, i, start);
dfs(c, start + 1, res);
swap(c, i, start);
}
}
static void swap(char[] c, int i, int j) {
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}