不改变元素的情况下求两个字符串数组的交集
时间: 2024-02-01 12:14:34 浏览: 29
可以使用哈希表来解决这个问题。
首先,将第一个字符串数组中的所有元素都放入一个哈希表中。
然后,遍历第二个字符串数组,对于其中的每个元素,如果它在哈希表中出现过,则将其加入结果集中并从哈希表中删除。
最后,返回结果集即可。
以下是示例代码:
```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() 方法求两个集合的交集,得到的结果仍然是一个集合。最后,我们遍历原始的第一个字符串数组,如果某个字符串的小写形式在交集中出现过,则将其添加到结果数组中。这样,我们就得到了两个字符串数组的交集,而且忽略了字符串的大小写。
java求两个字符串数组的交集忽略大小写
可以先将两个字符串数组转换成小写形式,然后使用Java中的Set集合去重和取交集操作。下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class IntersectionOfStringArrays {
public static void main(String[] args) {
String[] arr1 = {"apple", "banana", "Orange", "grape", "Pineapple"};
String[] arr2 = {"ORANGE", "pineapple", "melon", "grape"};
// 将两个数组转换成小写形式
String[] arr1Lower = Arrays.stream(arr1).map(String::toLowerCase).toArray(String[]::new);
String[] arr2Lower = Arrays.stream(arr2).map(String::toLowerCase).toArray(String[]::new);
// 使用Set集合取交集
Set<String> set1 = new HashSet<>(Arrays.asList(arr1Lower));
Set<String> set2 = new HashSet<>(Arrays.asList(arr2Lower));
set1.retainAll(set2);
// 输出交集
System.out.println(set1); // [orange, grape, pineapple]
}
}
```
在上面的示例代码中,我们首先使用Java 8中的Stream API将两个字符串数组转换成小写形式,然后使用HashSet去重并取交集,最后输出交集结果。