题目描述
给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)
如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。
返回所有不常用单词的列表。
您可以按任何顺序返回列表。
示例
示例一:
输入:A = “this apple is sweet”, B = “this apple is sour”
输出:[“sweet”,“sour”]
示例二:
输入:A = “apple apple”, B = “banana”
输出:[“banana”]
解题思路
1)将字符串A与B连接成一个字符串
2)用substr分隔出每个单词存储在vector1< string >中
3)将vector1中的单词用unordered_map<string,int>统计
4)遍历unordered_map找到second==1
的单词,存储在vector2< string >中
5)返回vector2
完整代码
class Solution {
public:
vector<string> uncommonFromSentences(string A, string B) {
string s = A+" "+B;
vector<string> v;
int start=0;
int last=0;
string words;
do{
last=s.find(' ',start);
words=s.substr(start,last-start); //取子串
v.push_back(words); //存子串
start=last+1;
}while(-1!=last);
unordered_map<string,int> m;
for(auto &e:v)
m[e]++; //用unordered_map统计单词出现的次数
vector <string> v2;
for(auto &e:m)
{
if(e.second==1) //找到出现一次的单词
v2.push_back(e.first); //放在数组中
}
return v2;
}
};