884. 两句话中的不常见单词

145 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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 <= 200
  • s1 和 s2 由小写英文字母和空格组成
  • s1 和 s2 都不含前导或尾随空格
  • s1 和 s2 中的所有单词间均由单个空格分隔

思路

  • 按照数学思路,这题应该是求两个句子的补集,不知道说的对不对,无所谓,看下图

企业微信截图_1669102587920.png

  • 首先将传入的s1s2两个字符串转化为单个单词的字符串数组

  • 然后利用数组的concat方法将两个字符串数组拼接起来

  • 遍历合并后的数组,利用indexOflastIndexOf判断当前字符串是不是在数组中有重复项

    • 如果有,那么排除,这里排除了两种情况
      • 第一种,这个字符在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;
};