3妹:哈哈哈哈哈哈,太搞笑了~ 呵呵呵呵呵呵
2哥:3妹干嘛呢, 笑的这么魔性!
3妹:在看王牌对王牌,老搞笑了
2哥:这季好像没有贾玲吧。
3妹:是啊,听说贾玲去导电影了, 还狂瘦了100斤呢, 哎,我也该减减肥了。
2哥:切,你每隔几天就会说要减肥,也没见你减啊
3妹:不吃饱哪有力气减肥,我每天还要刷题、找工作,多辛苦啊。
2哥:说到刷题, 今天的题目做了没呢?
3妹:嗯嗯,没呢没呢,现在就去做。
#题目:
给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。
示例 1:
输入:words1 = [“leetcode”,“is”,“amazing”,“as”,“is”], words2 = [“amazing”,“leetcode”,“is”]
输出:2
解释:
- “leetcode” 在两个数组中都恰好出现一次,计入答案。
- “amazing” 在两个数组中都恰好出现一次,计入答案。
- “is” 在两个数组中都出现过,但在 words1 中出现了 2 次,不计入答案。
- “as” 在 words1 中出现了一次,但是在 words2 中没有出现过,不计入答案。
所以,有 2 个字符串在两个数组中都恰好出现了一次。
示例 2:
输入:words1 = [“b”,“bb”,“bbb”], words2 = [“a”,“aa”,“aaa”]
输出:0
解释:没有字符串在两个数组中都恰好出现一次。
示例 3:
输入:words1 = [“a”,“ab”], words2 = [“a”,“a”,“a”,“ab”]
输出:1
解释:唯一在两个数组中都出现一次的字符串是 “ab” 。
提示:
1 <= words1.length, words2.length <= 1000
1 <= words1[i].length, words2[j].length <= 30
words1[i] 和 words2[j] 都只包含小写英文字母。
#思路:
哈希表,
我们用两个哈希表分别统计 word1与 word2 中字符串的出现次数。
随后,我们遍历第一个哈希表中的字符串,检查它在 word1与 word2 中的出现次数是否均为 1。与此同时,我们统计出现过一次的公共字符串个数,如果某个字符串在两个数组中均只出现一次,那么我们将个数加 1。最终,我们返回该个数作为答案。
#java代码1:
class Solution {
public int countWords(String[] words1, String[] words2) {
// 统计字符串出现频率
Map<String, Integer> freq1 = new HashMap<>();
Map<String, Integer> freq2 = new HashMap<>();
for (String w : words1) {
freq1.put(w, freq1.getOrDefault(w, 0) + 1);
}
for (String w : words2) {
freq2.put(w, freq2.getOrDefault(w, 0) + 1);
}
// 遍历 words1 出现的字符并判断是否满足要求
int res = 0;
for (String w : freq1.keySet()) {
if (freq1.get(w) == 1 && freq2.getOrDefault(w, 0) == 1) {
res++;
}
}
return res;
}
}