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 말곤 떠오르지 않았다.
댓글 0