-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2246.go
40 lines (37 loc) · 968 Bytes
/
2246.go
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
func max(a int, b int) int {
if a > b {
return a
}
return b
}
func dfs(currNode int, adj [][]int, s string, Ans *int) int {
mxLen, secondMxLen := 0, 0
for i := 0; i < len(adj[currNode]); i++ {
child := adj[currNode][i]
mxLenFromChild := dfs(child, adj, s, Ans)
if s[child] == s[currNode] {
continue
}
//mxLenFromChild := dfs(child, adj, s, Ans)
if mxLenFromChild > mxLen {
secondMxLen = mxLen
mxLen = mxLenFromChild
} else if mxLenFromChild > secondMxLen {
secondMxLen = mxLenFromChild
}
}
*Ans = max(*Ans, mxLen + secondMxLen + 1)
return mxLen + 1
}
func longestPath(parent []int, s string) int {
sz := len(parent)
adj := make([][]int, sz)
for i := 1; i < sz; i++ {
u := parent[i]
v := i
adj[u] = append(adj[u], v)
}
Ans := 1
dfs(0, adj, s, &Ans)
return Ans
}