zoukankan      html  css  js  c++  java
  • LeetCode.884-两句话中不常见的单词(Uncommon Words from Two Sentences)

    这是悦乐书的第338次更新,第362篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第207题(顺位题号是884)。我们给出了两个句子A和B。(一个句子是一串空格分隔的单词。每个单词只由小写字母组成。)如果一个单词在其中一个句子中只显示一次,并且不出现在另一个句子中,则该单词不常见。返回所有不常见单词的列表。你可以按任何顺序返回列表。例如:

    输入:A = "this apple is sweet", B = "this apple is sour"
    输出:["sweet","sour"]

    输入:A = "apple apple", B = "banana"
    输出:["banana"]

    注意

    • 0 <= A.length <= 200

    • 0 <= B.length <= 200

    • A和B都只包含空格和小写字母。

    本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

    02 第一种解法

    题目的要求有两点:

    • 出现两次及以上的单词不要,无论在A中还是在B中。

    • A中单词不能出现在B中,B中单词不能出现在A中。

    换一种方式来讲,最后的结果字符串数组只要出现一次的单词。所以,我们可以使用HashMap,以每个单词为key,以其出现次数为value,将字符串A、B按照空格拆分为字符串数组,遍历其中的元素,存入HashMap中,接着遍历HashMap,将value值为1的key元素添加进结果数组中,最后返回结果数组。

    public String[] uncommonFromSentences(String A, String B) {
        List<String> result = new ArrayList<String>();
        Map<String, Integer> map = new HashMap<String, Integer>();
        String[] arr = A.split(" ");
        for (String str : arr) {
            map.put(str, map.getOrDefault(str, 0)+1);
        }
        String[] arr2 = B.split(" ");
        for (String str : arr2) {
            map.put(str, map.getOrDefault(str, 0)+1);
        }
        for (String key : map.keySet()) {
            if (map.get(key) == 1) {
                result.add(key);
            }
        }
        return result.toArray(new String[result.size()]);
    }
    

    03 第二种解法

    我们也可以将字符串A和B连接在一起,只使用一个for循环来处理单词,其他思路不变。

    public String[] uncommonFromSentences2(String A, String B) {
        List<String> result = new ArrayList<String>();
        Map<String, Integer> map = new HashMap<String, Integer>();
        String[] arr = (A+" "+B).split(" ");
        for (String str : arr) {
            if (!str.isEmpty()) {
                map.put(str, map.getOrDefault(str, 0)+1);
            }
        }
        for (String key : map.keySet()) {
            if (map.get(key) == 1) {
                result.add(key);
            }
        }
        return result.toArray(new String[result.size()]);
    }
    

    04 小结

    算法专题目前已连续日更超过六个月,算法题文章207+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

  • 相关阅读:
    aspose.word 页脚插入图片图片浮动
    Aspose.Words插入表格,表格居中显示
    git常用命令
    openlayers之矢量加载标记点
    三、反射、动态加载
    openlayers交互之多边形
    openlayers轨迹回放
    openlayers交互之线
    关闭2000的默认共享
    开始blog,有点晚,但还是早
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/10947527.html
Copyright © 2011-2022 走看看