题目
给定两个句子 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、哈希映射。将两个句子中的每个字符串分别映射到哈希表中计数,最后输出计数为1的字符串。(待优化)
实现方法
一、哈希映射
class Solution {
public:
vector<string> uncommonFromSentences(string A, string B) {
vector<string> res;
unordered_map<string,int> m=countMap(A,B);
unordered_map<string,int>::iterator it=m.begin();
for(;it!=m.end();++it){
if(it->second==1) //统计出现过一次的字符串
res.push_back(it->first);
}
return res;
}
unordered_map<string,int> countMap(string& A,string& B){
unordered_map<string,int> m;
//将A放入哈希表中,映射计数
int flag=0;
for(int i=0;i<A.size();i++){
if(A[i]==' '){
string s;
while(flag<i){
s += A[flag++];
}
m[s]++;
flag=i+1;
}
}
string s;
while(flag<A.size()){
s +=A[flag++];
}
m[s]++;
//同理,将B放入哈希表中,映射计数(待优化)
flag=0;
for(int i=0;i<B.size();i++){
if(B[i]==' '){
string s;
while(flag<i){
s += B[flag++];
}
m[s]++;
flag=i+1;
}
}
string s1;
while(flag<B.size()){
s1 +=B[flag++];
}
m[s1]++;
return m;
}
};