3
private Map<Integer, Map<Character, Integer>> memo;4
private boolean hasCycle;6
public int largestPathValue(String colors, int[][] edges) {7
Map<Integer, List<Integer>> map = new HashMap<>();9
for (int edge[] : edges) {10
List<Integer> list = map.getOrDefault(edge[0], new ArrayList<>());12
map.put(edge[0], list);16
memo = new HashMap<>();18
boolean visited[] = new boolean[colors.length()];21
for (int i = 0; i < colors.length(); i++) {22
dfs(i, map, colors, visited);32
private Map<Character, Integer> dfs(33
int curr, Map<Integer, List<Integer>> map, String colors, boolean visited[]) {36
return new HashMap<>();39
if (memo.get(curr) != null) {40
return memo.get(curr);44
List<Integer> list = map.get(curr);45
Map<Character, Integer> currMap = new HashMap<>();47
if (list != null && !list.isEmpty()) {49
Map<Character, Integer> resMap = dfs(i, map, colors, visited);55
for (char c : resMap.keySet()) {56
int val = resMap.get(c);57
int currVal = currMap.getOrDefault(c, 0);58
currVal = Math.max(currVal, val);59
currMap.put(c, currVal);60
max = Math.max(currVal, max);65
int currentNodeColorCount = currMap.getOrDefault(colors.charAt(curr), 0);66
currMap.put(colors.charAt(curr), currentNodeColorCount + 1);68
max = Math.max(currentNodeColorCount + 1, max);70
visited[curr] = false;71
memo.put(curr, currMap);