C++Leetcode884:两句话中的不常见单词

题目
给定两个句子 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;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43434305/article/details/88045231