leetcode 884. 两句话中的不常见单词
题目描述
- 两句话中的不常见单词
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子 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([]string, 0)
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
炫耀一下:
本文由mdnice多平台发布
文章介绍了如何解决LeetCode的第884题,即找出两个句子中的不常见单词。解题方法是使用哈希表来统计每个单词在句子中出现的次数,然后找出只出现一次的单词。提供的Go语言代码实现了这一逻辑,最终返回只出现一次的单词列表。

582

被折叠的 条评论
为什么被折叠?



