困难
给你一棵 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.length1 <= n <= 105- 对于所有
i >= 1,都有0 <= parent[i] <= n - 1。 parent[0] == -1parent表示一棵合法的树。s只包含小写英文字母。