LeetCode-1002. 查找常用字符(Golang实现)

LeetCode题号:1002. 查找常用字符

给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。

你可以按任意顺序返回答案。

示例 1:

输入:["bella","label","roller"]
输出:["e","l","l"]
示例 2:

输入:["cool","lock","cook"]
输出:["c","o"]

思路:

就是挨个挨个取两数的交集 ,拿着去匹配下一个元素,直到匹配到最后,就是答案所在!

细节看代码, 不是很优雅,不断在优化,这是第一版,后期更新!

 代码:

func commonChars(A []string) []string {
	m := make(map[string]int)
	var l []string
	//用于初始化m1
	var index = 0
	for i := 0; i < len(A); i++ {
		index++
		m = getOther(index, m, A[i])
	}
	//m 即返回的 公共字符个数
	for k, v := range m {
		//大于1的既多append几次
		if v > 1 {
			for i := 0; i < v; i++ {
				l = append(l, k)
			}
		} else {
			l = append(l, k)
		}
	}
	return l
}

func getOther(index int, m map[string]int, s string) map[string]int {
	//用于统计字符串s的字母数量集
	m1 := make(map[string]int)
	//m2表示上一个交集与该字符串的公共结果集
	m2 := make(map[string]int)
	for i := 0; i < len(s); i++ {
		m1[string(s[i])]++
	}
	//初始化,一开始交集为空,所以用index作为条件判断,把第一个字符串的字母数量集返回过去
	if index == 1 {
		return m1
	}
	for k, v1 := range m1 {
		//判断新字符串中是否含有交集中的字母
		v2, ok := m[k]
		//如果key存在,则比较value(即字母个数),取交集(个数少即公共元素)
		if ok {
			if v1 <= v2 {
				m2[k] = v1
				continue
			}
			m2[k] = v2
		}
	}
	//返回交集
	return m2
}

往期回顾:

【1】LeetCode-409. 最长回文串(Goland实现)

【2】LeetCode-459. 重复的子字符串(Goland实现)

【3】LeetCode-53. 最大子序和(Goland实现)


❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ 

❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~

❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】

❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言论)

猜你喜欢

转载自blog.csdn.net/weixin_43970743/article/details/109077809