884. 两句话中的不常见单词 : 数据结构模拟题

简介: 884. 两句话中的不常见单词 : 数据结构模拟题

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 884. 两句话中的不常见单词 ,难度为 简单


Tag : 「模拟」、「哈希表」


句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。


如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。


给你两个 句子 s1s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。


示例 1:


输入:s1 = "this apple is sweet", s2 = "this apple is sour"
输出:["sweet","sour"]
复制代码


示例 2:


输入:s1 = "apple apple", s2 = "banana"
输出:["banana"]
复制代码


提示:


  • 1 <= s1.length, s2.length <= 2001<=s1.length,s2.length<=200
  • s1s2 由小写英文字母和空格组成
  • s1s2 都不含前导或尾随空格
  • s1s2 中的所有单词间均由单个空格分隔


数据结构 + 模拟



根据题意进行模拟即可,先使用「哈希表」对两字符串进行「词频统计」,然后分别从两边的「哈希表」出发,统计符合题意的字符串数量。


或是利用某个单词在一边出现一次,另外一边不曾出现,等价于「某个单词总共只出现一次」。


代码:


class Solution {
    public String[] uncommonFromSentences(String s1, String s2) {
        Map<String, Integer> map = new HashMap<>();
        String str = s1 + " " + s2;
        String[] ss = str.split(" ");
        for (String s : ss) map.put(s, map.getOrDefault(s, 0) + 1);
        List<String> list = new ArrayList<>();
        for (String s : map.keySet()) if (map.get(s) == 1) list.add(s);
        return list.toArray(new String[list.size()]);
    }
}
复制代码


  • 时间复杂度:令 nm 分别为两字符串长度,复杂度为 O(n + m)O(n+m)
  • 空间复杂度:O(n + m)O(n+m)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.884 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
剑指offer(C++)-JZ73:翻转单词序列(数据结构-队列 & 栈)
剑指offer(C++)-JZ73:翻转单词序列(数据结构-队列 & 栈)
|
设计模式 算法 Java
【数据结构和算法】反转字符串中的单词
给你一个字符串s,请你反转字符串中单词的顺序。 单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。 返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。 注意:输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
111 1
|
存储 自然语言处理 算法
☆打卡算法☆LeetCode 211. 添加与搜索单词 - 数据结构设计 算法解析
☆打卡算法☆LeetCode 211. 添加与搜索单词 - 数据结构设计 算法解析
|
存储 Java
Java数据结构之第十五章、Trie(前缀树/单词查找树)
1.前缀树的概念:前缀树又叫字典树或单词查找树(高效的存储和查找字符串集合的数据结构)。2.3.存储形式:存储的字符串可能:全是 小写字母 或全是 大写字母 或全是 数字 或全是 0和1。它是一棵,每个代表一个,从。字典树的根节点不包含字符,每个子节点代表一个字符,从根节点到任意一个节点所经过的路径上的字符连接起来即为该节点所代表的字符串。每个节点可以存储一个或多个字符串,通常使用一个标志来标记一个节点代表的字符串是否存在。当需要在一组字符串中查找某个字符串时,可以利用字典树来实现高效的查找操作。
153 0
|
算法 JavaScript 前端开发
【JavaScript数据结构与算法】字符串类(反转字符串中的单词)
【JavaScript数据结构与算法】字符串类(反转字符串中的单词)
180 0
|
存储
数据结构90-案例分析3-50000个单词的存储
数据结构90-案例分析3-50000个单词的存储
111 0
数据结构90-案例分析3-50000个单词的存储
【CCCC】L2-032 彩虹瓶 (25分),模拟题,出栈顺序
【CCCC】L2-032 彩虹瓶 (25分),模拟题,出栈顺序
200 0
385. 迷你语法分析器 : 栈运用模拟题
385. 迷你语法分析器 : 栈运用模拟题
|
机器学习/深度学习 存储 算法
2034. 股票价格波动 : 数据结构模拟题
2034. 股票价格波动 : 数据结构模拟题
|
机器学习/深度学习
846. 一手顺子 : 数据结构模拟题
846. 一手顺子 : 数据结构模拟题