摘要:句子是一串由空格分隔的单词。每个单词仅由小写字母组成。如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。返回所有不常用单词的列表。
前言
LeetCode Weekly Contest 97的第一道题目,分值为3分。原题目要求如下:
给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)解题思路如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。
返回所有不常用单词的列表。
您可以按任何顺序返回列表。
示例 1:
输入:A = "this apple is sweet", B = "this apple is sour"
输出:["sweet","sour"]
示例 2:输入:A = "apple apple", B = "banana"
输出:["banana"]提示:
0 <= A.length <= 200
0 <= B.length <= 200
A 和 B 都只包含空格和小写字母。
这个题目其实很简单,解题步骤如下:
1.先统计每个单词的出现次数,生成以单词和出现次数为元素的集合
2.获取两个集合不相交且集合元素中出现次数为1的元素
以示例1为例子:
获取到的元素如下:
集合A [{"this",1},{"apple",1},{"is",1},{"sweet",1}] 集合B [{"this",1},{"apple",1},{"is",1},{"sour",1}]
2.我取不相交的部分的思路是先取出相交的部分集合C,然后分别取出集合A和集合B中集合C且出现次数不为1的元素:
集合C [{"this",1},{"apple",1},{"is",1}] 结果集合 [{"sweet",1},{"sour",1}] 最后取出结果集合中的单词即可 ["sweet","sour"]实现代码
public String[] uncommonFromSentences(String A, String B) { MapmapA = getCountMap(A); Map mapB = getCountMap(B); Set set = new HashSet<>(); Set sameSet = new HashSet<>(); //两个集合中都出现的单词 for (String keyA : mapA.keySet()) { for (String keyB : mapB.keySet()) { if (keyA.equals(keyB)) { sameSet.add(keyA); } } } calDiff(mapA, sameSet, set); calDiff(mapB, sameSet, set); return set.toArray(new String[set.size()]); } /** * 返回句子中每个单词的出现次数统计情况,key为单词,value为出现次数 * @param str * @return */ private Map getCountMap(String str) { Map map = new HashMap<>(); if (str != null && str.length() > 0) { String[] strs = str.split(" "); for (String s : strs) { if (map.containsKey(s)) { map.put(s, map.get(s) + 1); } else { map.put(s, 1); } } } return map; } /** * 取出Map中不存在重复集合中的key,且key的value不为1 * @param map * @param sameSet 重复集合 * @param set */ private void calDiff(Map map, Set sameSet, Set set) { if (!map.isEmpty()) { Iterator > it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = it.next(); String key = entry.getKey(); if (!sameSet.contains(key) && entry.getValue() == 1) { set.add(key); } } } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76705.html
摘要:题目链接题目分析返回给定的两个句子中唯一不同的单词。思路先把两个句子分别按空格分割成数组,再计算两个数组的差集,即可得知两个句子的差异。测试后发现没通过和这个测试组合。系统提示应当返回。因为用了函数,因此键为单词,值为出现次数。 884. Uncommon Words from Two Sentences 题目链接 884. Uncommon Words from Two Senten...
摘要:应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。要求分别计算两个多项式的乘积与和,输出第一项为乘积的系数和指数,第二行为和的系数和指数。选定了表示方法后,考虑数据结构设计。选择链表在设计数据结构的时候有系数指数和指针结构指针。 函数题给出编译器为 C(gcc) 的解答,编程题给出编译器 C++(g++) 或 Python(python3) 的解答。 函数题 两个有序链表序...
摘要:前言模型作用为提取三元组,基于英文,目前尝试改为中文。论文题目名称叫代码地址论文核心论文核心主要解决个问题,一个是基于动词结构之外的三元组提取,例如形容词等,二是基于上下文的三元组提取,举例说明。 前言:模型作用为提取三元组,基于英文,目前尝试改为中文。论文题目名称叫《Open Language Learning for Information Extraction》,代码地址:h...
阅读 2380·2021-10-09 09:41
阅读 3172·2021-09-26 09:46
阅读 835·2021-09-03 10:34
阅读 3150·2021-08-11 11:22
阅读 3364·2019-08-30 14:12
阅读 710·2019-08-26 11:34
阅读 3343·2019-08-26 11:00
阅读 1749·2019-08-26 10:26