2085. Count Common Words With One Occurrence

2085. Count Common Words With One Occurrence

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Given two string arrays words1 and words2, return the number of strings that appear 
exactly once in each of the two arrays.



Example 1:

Input: words1 = ["leetcode","is","amazing","as","is"], words2 = ["amazing","leetcode","is"]
Output: 2
Explanation:
- "leetcode" appears exactly once in each of the two arrays. We count this string.
- "amazing" appears exactly once in each of the two arrays. We count this string.
- "is" appears in each of the two arrays, but there are 2 occurrences of it in words1.
We do not count this string.
- "as" appears once in words1, but does not appear in words2. We do not count this string.
Thus, there are 2 strings that appear exactly once in each of the two arrays.
Example 2:

Input: words1 = ["b","bb","bbb"], words2 = ["a","aa","aaa"]
Output: 0
Explanation: There are no strings that appear in each of the two arrays.
Example 3:

Input: words1 = ["a","ab"], words2 = ["a","a","a","ab"]
Output: 1
Explanation: The only string that appears exactly once in each of the two arrays is "ab".


Constraints:

1 <= words1.length, words2.length <= 1000
1 <= words1[i].length, words2[j].length <= 30
words1[i] and words2[j] consists only of lowercase English letters.

难度 : Easy

思路

使用2个HashMap来分别存储words1和words2的每个word出现的次数。
如果一个word出现在words1种次数为1而且同时出现在words2种次数也为1,结果加1
优化的话可以考虑遍历size小的map。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int countWords(String[] words1, String[] words2) {
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();
for (String word : words1) {
map1.put(word, map1.getOrDefault(word, 0) + 1);
}
for (String word : words2) {
map2.put(word, map2.getOrDefault(word, 0) + 1);
}
int ans = 0;
for (String key : map1.keySet()) {
if (map1.get(key) == 1 && map2.getOrDefault(key, 0) == 1) {
ans++;
}
}
return ans;
}
}