leetcode 1002. 查找共用字符

107 阅读2分钟

[toc] leetcode 1002. 查找共用字符.

题目描述

  1. 查找共用字符

给你一个字符串数组 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多平台发布