[leetcode-in-go] 0049- Group Anagrams

Given an array of strings, group anagrams together.

Example:

Input: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Output:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

Note:

All inputs will be in lowercase.
The order of your output does not matter.
解题思路
  • 根据各字母出现次数,按字母表顺序构造的字符串正好能当做分组的 Key
  • 字符串的拼接可以使用 bytes.Buffer
func getKey(str string) string {
	// 记录 26 个英文字母出现的次数
	cnt := [26]int{}
	for _, c := range str {
		cnt[int(c-'a')]++
	}
	// 各个字母出现次数相同即为一组,拥有相同的 key
	var key bytes.Buffer
	for _, n := range cnt {
		key.WriteByte(byte(n))
	}
	return key.String()
}

func groupAnagrams(strs []string) [][]string {
	result := [][]string{}
	kv := map[string][]string{}

	for _, s := range strs {
		key := getKey(s)
		kv[key] = append(kv[key], s)
	}

	for _, v := range kv {
		result = append(result, v)
	}
	return result
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值