https://leetcode.com/problems/number-of-nodes-in-the-sub-tree-with-the-same-label/



class Solution:
    def dfs(self, start, graph, visit, pts, label):
        pts[start][label[start]] += 1  
        for next in graph[start]:
            if visit[next] == 0:
                visit[next] = 1
                self.dfs(next, graph, visit, pts, label)
                for j in range(26):
                    pts[start][j] += pts[next][j]    

    def countSubTrees(self, n: int, edges: List[List[int]], labels: str) -> List[int]:
        pts = [[0 for i in range(26)] for j in range(n)]
        label = [ord(s) - ord('a') for s in labels]
        visit = [0 for _ in range(n)]
        graph = [[] for _ in range(n)]
        for x, y in edges:
            graph[x].append(y)
            graph[y].append(x)
        visit[0] = 1
        self.dfs(0, graph, visit, pts, label)
        return [pts[i][label[i]] for i in range(n)]


뭔가 깔끔하게 푸는 방법이 있나 고민했지만

그냥 26개 알파벳 전부 저장하는 트리dp 말곤 떠오르지 않았다.