【教3妹学编程-算法题】统计出现过一次的公共字符串

发布时间:2024年01月12日

开心

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;
    }
}

文章来源:https://blog.csdn.net/kangbin825/article/details/135560031
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。