首先需要判断,该字符串是否具备拼接成回文串的潜质。
然后就是开启拼接的过程。即尝试所有的可能。
public class test {
public List<String> generate(String s){
List<String> res = new ArrayList<>();
if(s == null || s.length() == 0){
return res;
}
int[] count = new int[256];
int n = s.length();
int po = -1;
for(int i=0;i<n;i++){
count[s.charAt(i)]++;
}
int oneCount = 0;
for(int i=0;i<256;i++){
oneCount += count[i]%2;
if(count[i]%2 == 1){
po = i;
}
}
if(oneCount > 1){
return res;
}
String init = "";
if(po != -1){
init += (char)po;
count[po]--;
}
dfs(count, init, n, res);
return res;
}
private void dfs(int[] count, String cur, int n, List<String> res){
if(cur.length() == n){
res.add(cur);
return;
}
for(int i=0; i<count.length; i++){
if(count[i] > 0){
count[i] -= 2;
dfs(count, (char)i + cur + (char)i, n, res);
count[i] += 2;
}
}
}
}