1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
public List<String> (String s) { List<String> result = new ArrayList<>(); Map<Character, Integer> map = new HashMap<>(); int count = 0; String odd = ""; List<Character> half = new ArrayList<>();
for (Character ch : s.toCharArray()) map.put(ch, map.getOrDefault(ch, 0) + 1);
for (Map.Entry<Character, Integer> entry : map.entrySet()) { Character key = entry.getKey(); Integer value = entry.getValue(); if (value % 2 != 0) { count++;
if (count > 1) return result;
odd = String.valueOf(key); } for (int i = 0; i < value / 2; i++) half.add(key); }
permutation(result, half, odd, new StringBuilder(), new boolean[half.size()]);
return result; }
private void permutation(List<String> result, List<Character> half, String odd, StringBuilder sb, boolean[] visit) { if (sb.length() == half.size()) { result.add(sb.toString() + odd + sb.reverse().toString()); sb.reverse(); return; }
for (int i = 0; i < half.size(); i++) { if (i > 0 && half.get(i) == half.get(i - 1) && !visit[i - 1]) continue; if (!visit[i]) { visit[i] = true; sb.append(half.get(i)); permutation(result, half, odd, sb, visit); sb.deleteCharAt(sb.length() - 1); visit[i] = false; } } }
|
近期评论