难度:简单
目录
一、问题描述
这里直接采用的是LeetCode上面的问题描述。
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子 s1
和 s2
,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
下面给出示例:
提示:
- 1 <= s1.length, s2.length <= 200
- s1 和 s2 由小写英文字母和空格组成
- s1 和 s2 都不含前导或尾随空格
- s1 和 s2 中的所有单词间均由单个空格分隔
二、思路
1、解题思路
题目中明确规定了,不常用单词 意思就是在两个句子中 只出现过一次。
可以看到 示例2 中句子 s1 中出现了 两次 apple 但是 只统计了出现了 一次 的单词 banana 为 不常用单词。
再看提示中明确规定了,s1 和 s2 :
- s1 和 s2 由小写英文字母和空格组成
- s1 和 s2 都不含前导或尾随空格
- s1 和 s2 中的所有单词间均由单个空格分隔
所以可以直接采用 哈希表 将 单词 与 单词出现的次数 存入表中。
哈希表的结构为:
- unordered_map<string,int> hashTable;
分别遍历两个句子 s1 和 s2 将单词取出来存入哈希表中,并统计出现的次数。再遍历哈希表将只出现了一次的单词保存下来并返回。
2、极端情况判断
- 这里使用 范围for 结束过后会少存入一个单词。
3、解决极端情况
- 范围for 结束后需要将没有存入哈希表的单词存入一次。
三、解题
1、代码实现
class Solution {
public:
vector<string> uncommonFromSentences(string s1, string s2) {
unordered_map<string,int> hashTable;
vector<string> ans;
string temp = "";
for(auto it:s1){
if(it == ' '){
hashTable[temp]++;
temp = "";
continue;
}
temp+=it;
}
hashTable[temp]++;
temp = "";
for(auto it:s2){
if(it == ' '){
hashTable[temp]++;
temp = "";
continue;
}
temp+=it;
}
hashTable[temp]++;
for(auto it : hashTable){
if(it.second == 1){
ans.emplace_back(it.first);
}
}
return ans;
}
};
2、时间复杂度 and 空间复杂度
时间复杂度:,n 为
空间复杂度:,n 为
四、总结
这题还是比较简单的,使用哈希表的特性能够很方便的求解。
如果对你有什么帮助,请star ♥ 一下,收藏一下,蟹蟹啦!