开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
题目 leetcode.cn/
- 句子 是一串由空格分隔的单词。每个 单词 **仅由小写字母组成。
- 如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 **。
- 给你两个 句子
s1和s2,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
示例
输入:s1 = "this apple is sweet", s2 = "this apple is sour",输出:["sweet","sour"]输入: s1 = "apple apple", s2 = "banana",输出:["banana"]
提示
1 <= s1.length, s2.length <= 200s1和s2由小写英文字母和空格组成s1和s2都不含前导或尾随空格s1和s2中的所有单词间均由单个空格分隔
思路
- 按照数学思路,这题应该是求两个句子的
补集,不知道说的对不对,无所谓,看下图
-
首先将传入的
s1和s2两个字符串转化为单个单词的字符串数组 -
然后利用数组的
concat方法将两个字符串数组拼接起来 -
遍历合并后的数组,利用
indexOf和lastIndexOf判断当前字符串是不是在数组中有重复项- 如果有,那么排除,这里排除了两种情况
- 第一种,这个字符在
s1中出现了一次,在s2中也出现了一次,合并后出现了两次,这样就不满足题目中说的在一个句子中出现一次,在另一个句子中不出现,所以要排除掉 - 第二种,这个字符在
s1中确实没有出现,但是在s2中出现了多次,这样也要排除掉,因为不满足在一个句子中出现一次这个定义
- 第一种,这个字符在
- 如果没有,那么这个字符一定是唯一的,不管他是在
s1中出现,还是在s2中出现,都满足题目要求
- 如果有,那么排除,这里排除了两种情况
-
将符合条件的单词添加进结果变量中保存,然后返回即可
代码
function uncommonFromSentences(s1: string, s2: string): string[] {
let result = [];
let arrS1 = s1.split(' ');
let arrS2 = s2.split(' ');
let arr = arrS1.concat(arrS2);
for(let i = 0;i < arr.length; i++){
if(arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])){
result.push(arr[i]);
}
}
return result;
};