题目

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

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

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

来源:力扣(LeetCode)


解答

先将s1和s2两个句子,拆分成单词,并分别存入自己对应的哈希表中,哈希表key=单词,value=单词出现的次数。

然后分别遍历两个哈希表,遍历当前哈希表时,其出现次数为1且在另一个哈希表中没有出现,则将其添加到返回队列中。

代码如下:

class Solution {
public:
    vector<string> uncommonFromSentences(string s1, string s2) {
        unordered_map<string, int> mp1;
        unordered_map<string, int> mp2;

        stringstream ss1(s1);
        stringstream ss2(s2);
        string tmp;
        vector<string> ret;

        while (getline(ss1, tmp, ' ')) {
            mp1[tmp]++;
        }
        while (getline(ss2, tmp, ' ')) {
            mp2[tmp]++;
        }

        for (const auto &i: mp1) {
            if (i.second > 1) {
                continue;
            }
            auto it = mp2.find(i.first);
            if (it == mp2.end()) {
                ret.push_back(i.first);
            }
        }

        for (const auto &i: mp2) {
            if (i.second > 1) {
                continue;
            }
            auto it = mp1.find(i.first);
            if (it == mp1.end()) {
                ret.push_back(i.first);
            }
        }

        return ret;
    }
};