力扣习题哈希表篇:两句话中不常见单词
本期我们来做一道哈希算法相关的算法题:两句话中不常见单词
题目链接:884. 两句话中的不常见单词 - 力扣(LeetCode)
题目如下:
思路:
-
使用哈希表统计两个句子中所有单词的出现次数。
-
遍历每个句子,分割单词并更新哈希表。
-
最后遍历哈希表,将出现次数为1的单词加入结果向量。
关键点:
-
正确分割单词:通过检测空格或字符串结束来提取单词。
-
使用索引记录单词起始位置,避免重复初始化。
-
比较字符时使用单引号(空格是字符,不是字符串)。
题解:
class Solution {
public:vector<string> uncommonFromSentences(string s1, string s2) {vector<string> ret;unordered_map<string, int> hash;int j = 0; // 记录单词起始位置for (int i = 0; i <= s1.size(); i++) {// 当遇到空格或字符串结束时,提取单词if (i == s1.size() || s1[i] == ' ') {string word = s1.substr(j, i - j);hash[word]++;j = i + 1; // 更新单词起始位置}}j = 0; // 重置 j 用于处理 s2for (int i = 0; i <= s2.size(); i++) {if (i == s2.size() || s2[i] == ' ') {string word = s2.substr(j, i - j);hash[word]++;j = i + 1;}}// 遍历哈希表,找到出现次数为1的单词for (auto& x : hash){if (x.second == 1){ret.push_back(x.first);}}return ret;}
};
本期内容就到这里了,喜欢请点个赞谢谢。