[toc] leetcode 1002. 查找共用字符.
题目描述
- 查找共用字符
给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。
示例 1:
输入:words = ["bella","label","roller"] 输出:["e","l","l"] 示例 2:
输入:words = ["cool","lock","cook"] 输出:["c","o"]
提示:
1 <= words.length <= 100 1 <= words[i].length <= 100 words[i] 由小写英文字母组成
解题思路
法1
哈希表:
使用一个长度为26的数组minFreq来记录每个字符在所有单词中出现的最小次数。
首先,我们将minFreq数组的每个元素初始化为最大值。
然后,对于每个单词,我们统计每个字符的出现次数,并将其与minFreq数组中的相应元素比较,更新最小次数。
最后,我们根据minFreq数组构造结果数组,将每个字符按照其最小出现次数添加到结果中。
- 时间复杂度(O(n))
- 空间复杂度(O(n))
执行结果
法1
func commonChars(words []string) []string {
// 初始化每个字符的最小出现次数为最大值
minFreq := make([]int, 26)
for i := range minFreq {
minFreq[i] = math.MaxInt32
}
// 统计每个字符在每个单词中的出现次数
for _, word := range words {
freq := make([]int, 26)
for _, ch := range word {
freq[ch-'a']++
}
// 更新每个字符的最小出现次数
for i := 0; i < 26; i++ {
if freq[i] < minFreq[i] {
minFreq[i] = freq[i]
}
}
}
// 构造结果数组
result := make([]string, 0)
for i := 0; i < 26; i++ {
ch := string('a' + i)
for j := 0; j < minFreq[i]; j++ {
result = append(result, ch)
}
}
return result
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 4 ms , 在所有 Go 提交中击败了 56.00% 的用户 内存消耗: 2.7 MB , 在所有 Go 提交中击败了 55.20% 的用户 通过测试用例: 83 / 83 炫耀一下:
本文由mdnice多平台发布