# 2564. Substring XOR Queries
###### tags: `Leetcode` `Medium` `Bit Manipulation`
Link: https://leetcode.com/problems/substring-xor-queries/description/
## 思路
把所有substring的decimal value算出来 并放在hashmap里
hashmap的value记录substring的起点和终点
乍看之下 时间复杂度是$O(n^2)$ 但由于这个decimal value一定是integer 所以substring的长度不超过31 因此时间复杂度是$O(31n)$
When we process queries, we look for the ```q[0]^q[1]``` value in the hashmap (since ```q[0]^q[0]^q[1] == q[1]```)
## Code
```python=
class Solution:
def substringXorQueries(self, s: str, queries: List[List[int]]) -> List[List[int]]:
n = len(s)
seen = collections.defaultdict(lambda: [-1, -1])
for i in range(n-1, -1, -1):
if s[i]=='0':
seen[0] = [i, i]
continue
val = 0
for j in range(i, n):
val = val*2+int(s[j])
if val>2**32: break
seen[val] = [i, j]
return [seen[first^second] for first, second in queries]
```