一、题目
给定两个句子 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
都只包含空格和小写字母。
二、题解思路
- 题解思路:将A和B这两个字符串相加连接起来,然后将字符串单词存入到一维数组nums中,对nums中的单词进行排序,然后遍历单词,如果当前位置的单词与其前一个单词和后一个单词不同,则这个单词就是不常见的单词,将其存到结果数组中。
三、代码实现
- C++代码实现
class Solution {
public:
vector<string> uncommonFromSentences(string A, string B)
{
vector<string> nums;
vector<string> word_result;
string C = A + " " + B + " "; //连接A、B字符串
string temp = "";
for(int i = 0;i<C.size();i++)
{
if(C[i]!=' ') //注意此处是单引号
{
temp += C[i];
}
else
{
nums.push_back(temp); //存每个单词
temp = "";
}
}
sort(nums.begin(),nums.end()); //对数组中的单词进行排序
if(nums[0]!=nums[1]) //查看第一个单词是否是不常见的单词
word_result.push_back(nums[0]);
if(nums[nums.size()-1]!=nums[nums.size()-2]) //查看最后一个单词是否是不常见的单词
word_result.push_back(nums[nums.size()-1]);
for(int i = 1;i<nums.size()-1;i++) //遍历其余单词是否是不常见的单词
{
if(nums[i]!=nums[i+1] && nums[i]!=nums[i-1])
{
word_result.push_back(nums[i]);
}
}
return word_result;
}
};