49字母异位词分组解题记录

我在想提示词有哈希,可是异位词的hash key也没有共同点啊。但是可以转化后找到共同点,①排序之后的那个字符串作为key ②key是一个26位数组,在Go语言中虽然数组(非切片)是值类型,但固定长度的数组可以作为键。那么value又怎么组织呢?我们把value设置为一个字符串切片就好了。难点应该在这里的map使用相比于常见的情况要稍微多做一步转换。

go语法方面,需要补一下怎排序字符串:

func sortString(s string) string {
    runes := []rune(s) // 将字符串转为rune切片(支持Unicode字符)
    sort.Slice(runes, func(i, j int) bool {
        return runes[i] < runes[j]
    })
    return string(runes)
}

用排序解题:

func sortString(s string) string {
    runes := []rune(s) // 将字符串转为rune切片(支持Unicode字符)
    sort.Slice(runes, func(i, j int) bool {
        return runes[i] < runes[j]
    })
    return string(runes)
}

func groupAnagrams(strs []string) [][]string {
    m := make(map[string][]string)
    for i:=0; i<len(strs); i++ {
        sorted := sortString(strs[i])
        m[sorted] = append(m[sorted], strs[i])
    }

    // 将map结果转化为切片
    var res [][]string
    for _, v := range m {
        res = append(res, v)
    }
    return res
}

然后用数组解题:

func groupAnagrams(strs []string) [][]string {
    m := make(map[[26]int][]string)
    for i:=0; i<len(strs); i++ {
        var arr [26]int // 26的数组而不是make一个26的切片
        for _, c := range strs[i] {
            arr[c-'a']++ // 不要用=1而是++计数才能区分
        }
        // for j:=0; j<len(strs[i]); j++ {
            // arr[strs[i][j]-'a']++ 
        // } // 一样的
        m[arr] = append(m[arr], strs[i])
    }

    // 将map结果转化为切片
    var res [][]string
    for _, v := range m {
        res = append(res, v)
    }
    return res
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值