【Golang】LeetCode 49. 字母异位词分组

49. 字母异位词分组

题目描述

思路

我们同样使用哈希表来解决这道问题。

具体来说,我们对初始给定的strs数组进行遍历,对于每一个取到的字符串str,我们将其转为[]byte并使用sort.Slice进行排序。

我们将排序好的[]byte命名为curr,它就代表着当前字符串的一种"模式",对于字典序相同的"模式",它们应该被归纳为同一组异位词,因为构成它们的字符经过字典序排序之后是相同的。

在遍历之前我们应该建立一个map,它的keystring类型,value[]string类型。curr作为key,我们更新它的value,通过append的方式将当前的str加入到value的数组当中。

在遍历结束之后,我们对字典的value进行一次遍历,将答案放到数组当中。

Golang 题解

go 复制代码
func groupAnagrams(strs []string) [][]string {
    ans := [][]string{}
    mp := map[string][]string{}
    for _, str := range strs {
        curr := []byte(str)
        sort.Slice(curr, func(i, j int) bool {
            return curr[i] > curr[j] 
        })

        if _, ok := mp[string(curr)]; !ok {
            mp[string(curr)] = []string{}
        }
        mp[string(curr)] = append(mp[string(curr)], str)
    }

    for _, v := range mp {
        ans = append(ans, v)
    }

    return ans
}
相关推荐
aqiu1111115 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
辰烨chenye6 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
玖玥拾7 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
a187927218319 小时前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并
辰烨chenye9 小时前
LeetCode Hot 100 题解 · 子串篇
算法·leetcode·职场和发展
辰烨chenye10 小时前
LeetCode Hot 100 题解 · 堆篇
java·算法·leetcode
sylviiiiiia15 小时前
leetcode hot 100
python·算法·leetcode
wabs66616 小时前
关于二叉树【力扣199.二叉树的右视图的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
a1879272183116 小时前
【算法】动态规划第三篇:背包第一课——贪心之死与正序倒序开关
算法·leetcode·动态规划·贪心·dp·暴力·算法讲解