给你一棵 n
个节点的树,树的根节点为 0 ,n
个节点的编号为 0
到 n - 1
。这棵树用一个长度为 n
的数组 parent
表示,其中 parent[i]
是节点 i
的父节点。由于节点 0 是根节点,所以 parent[0] == -1
。
给你一个长度为 n
的字符串 s
,其中 s[i]
是节点 i
对应的字符。
一开始你有一个空字符串 dfsStr
,定义一个递归函数 dfs(int x)
,它的输入是节点 x
,并依次执行以下操作:
x
的所有孩子节点 y
,并调用 dfs(y)
。s[x]
添加到字符串 dfsStr
的末尾。注意,所有递归函数 dfs
都共享全局变量 dfsStr
。
你需要求出一个长度为 n
的布尔数组 answer
,对于 0
到 n - 1
的每一个下标 i
,你需要执行以下操作:
dfsStr
并调用 dfs(i)
。dfsStr
是一个 回文串 ,answer[i]
为 true
,否则 answer[i]
为 false
。请你返回字符串 answer
。
示例 1:
输入:parent = [-1,0,0,1,1,2], s = "aababa"
输出:[true,true,false,true,true,true]
解释:
dfs(0)
,得到字符串 dfsStr = "abaaba"
,是一个回文串。dfs(1)
,得到字符串dfsStr = "aba"
,是一个回文串。dfs(2)
,得到字符串dfsStr = "ab"
,不 是回文串。dfs(3)
,得到字符串dfsStr = "a"
,是一个回文串。dfs(4)
,得到字符串 dfsStr = "b"
,是一个回文串。dfs(5)
,得到字符串 dfsStr = "a"
,是一个回文串。示例 2:
输入:parent = [-1,0,0,0,0], s = "aabcb"
输出:[true,true,true,true,true]
解释:
每一次调用 dfs(x)
都得到一个回文串。
提示:
n == parent.length == s.length
1 <= n <= 105
i >= 1
,都有 0 <= parent[i] <= n - 1
。parent[0] == -1
parent
表示一棵合法的树。s
只包含小写英文字母。