j

jaryue

V1

2023/05/21阅读:9主题:默认主题

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

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


题目描述

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

句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。

如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。

给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。

示例 1:

输入:s1 = "this apple is sweet", s2 = "this apple is sour" 输出:["sweet","sour"] 示例 2:

输入:s1 = "apple apple", s2 = "banana" 输出:["banana"]

提示:

1 <= s1.length, s2.length <= 200 s1 和 s2 由小写英文字母和空格组成 s1 和 s2 都不含前导或尾随空格 s1 和 s2 中的所有单词间均由单个空格分隔

解题思路

法1

哈希表

1 使用一个map[string]int来储存单词出现的次数,其中key储存单词,value储存次数

2 使用字符串切割的返回将字符串以空格' '进行分割,得到一个单词的数组,

3 遍历单词的数组,并向map中储存值

最后输出只出现一次的字符串

  • 时间复杂度(O(n))
  • 空间复杂度(O(n))

执行结果

法1

我们使用strings.Split函数将句子s1和s2按照空格分割成单词数组words1和words2。

然后,我们使用一个countsmap来记录每个单词的出现次数。遍历words1和words2,分别记录每个单词的出现次数。

接下来,我们遍历countsmap,找到在两个句子中只出现一次的单词,并将其添加到uncommonWords列表中。

最后,我们返回uncommonWords作为结果。

func uncommonFromSentences(s1 string, s2 string) []string {
 // 使用map记录单词出现的次数
 counts := make(map[string]int)

 // 将句子s1和s2按空格分割成单词
 words1 := strings.Split(s1, " ")
 words2 := strings.Split(s2, " ")

 // 遍历句子s1,记录每个单词的出现次数
 for _, word := range words1 {
  counts[word]++
 }

 // 遍历句子s2,记录每个单词的出现次数
 for _, word := range words2 {
  counts[word]++
 }

 // 找到在两个句子中只出现一次的单词
 uncommonWords := make([]string0)
 for word, count := range counts {
  if count == 1 {
   uncommonWords = append(uncommonWords, word)
  }
 }

 return uncommonWords
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 2.1 MB , 在所有 Go 提交中击败了 47.83% 的用户 通过测试用例: 55 / 55 炫耀一下:



分类:

后端

标签:

后端

作者介绍

j
jaryue
V1