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
| class Solution { public long countPalindromePaths(List<Integer> parent, String s) { int n = parent.size(); for (int i = 0; i < n; ++i) graph.put(i, new HashMap<>()); for (int i = 1; i < parent.size(); ++i) graph.get(parent.get(i)).put(i, 1 << (s.charAt(i) - 'a' )); dfs(0, 0); return res; }
private void dfs(int node, int xorVal) { res += xorCount.getOrDefault(xorVal, 0); for (int i = 0; i < 26; ++i) res += xorCount.getOrDefault(xorVal ^ (1 << i), 0); xorCount.put(xorVal, xorCount.getOrDefault(xorVal, 0) + 1); Map<Integer, Integer> nexts = graph.get(node); for (int next : nexts.keySet()) dfs(next, xorVal ^ graph.get(node).get(next)); }
long res = 0; Map<Integer, Map<Integer, Integer>> graph = new HashMap<>(); Map<Integer, Integer> xorCount = new HashMap<>(); }
|