不改变元素的情况下求两个字符串数组的交集
时间: 2024-02-01 20:14:34 浏览: 73
可以使用哈希表来解决这个问题。
首先,将第一个字符串数组中的所有元素都放入一个哈希表中。
然后,遍历第二个字符串数组,对于其中的每个元素,如果它在哈希表中出现过,则将其加入结果集中并从哈希表中删除。
最后,返回结果集即可。
以下是示例代码:
```python
def intersect(arr1, arr2):
if not arr1 or not arr2:
return []
hash_map = {}
for s in arr1:
hash_map[s] = hash_map.get(s, 0) + 1
res = []
for s in arr2:
if s in hash_map and hash_map[s] > 0:
res.append(s)
hash_map[s] -= 1
return res
```
时间复杂度为 O(m+n),其中 m 和 n 分别为两个字符串数组的长度。
相关问题
不改变元素的情况下忽略大小写求两个字符串数组的交集
可以先将两个字符串数组中的所有字符串都转换成小写,再使用 Python 中的 set.intersection() 方法求交集,最后将交集转换回原始大小写形式。
示例代码:
```python
arr1 = ["apple", "Banana", "orange", "grapes"]
arr2 = ["GRAPEs", "pear", "banana", "watermelon"]
# 将两个数组中的所有字符串都转换成小写
set1 = set(map(str.lower, arr1))
set2 = set(map(str.lower, arr2))
# 求交集
intersection = set1.intersection(set2)
# 将交集转换回原始大小写形式
result = [word for word in arr1 if word.lower() in intersection]
print(result) # ['apple', 'Banana', 'grapes']
```
在上述代码中,我们使用 map() 方法将数组中的每个字符串都转换成小写形式,然后使用 set() 方法将其转换为集合。接着,我们使用 set.intersection() 方法求两个集合的交集,得到的结果仍然是一个集合。最后,我们遍历原始的第一个字符串数组,如果某个字符串的小写形式在交集中出现过,则将其添加到结果数组中。这样,我们就得到了两个字符串数组的交集,而且忽略了字符串的大小写。
阅读全文