0
点赞
收藏
分享

微信扫一扫

【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库

律楷粑粑 2024-09-29 阅读 22

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:公司命名

代码与解题思路

func distinctNames(ideas []string) (ans int64) {
    // ideas = ["coffee","donuts","time","toffee"]
    // 根据首字母分组
    // c offee
    // d onuts
    // t ime、offee
    // 首字母 d 和 c 之间有 1*1 组,t 和 c 之间有 0*1 组,t 和 d 之间有 1*2 组
    // 总共 (1*1 + 0*1 + 1*2) * 2 = 6 组 

    // 根据首字母分组
    g := [26]map[string]int{}
    for i := range g {
        g[i] = map[string]int{}
    }
    for _, s := range ideas {
        g[s[0]-'a'][s[1:]] = 1
    }

    // 枚举所有组
    for i, a := range g {
        for _, b := range g[:i] {
            m := 0 // 相同后续的个数(比如示例一中的 offee)
            for s := range a { // 枚举该首字母的集合
                if b[s] == 1 { // 两个集合对比查看是否有相同的后续
                    m++
                }
            }
            ans += int64(len(a)-m) * int64(len(b)-m) // 乘法原理计数
        }
    }
    return ans * 2 // 前后顺序,最后需要 * 2
}

今天这道题比较难

我这个解法的核心思路是:“根据首字母进行分组”,只要想到这个思路,后续就能通过枚举所有的组合来计算所有可能存在的方案了

延续上面的思路,如注释,模拟题目的示例一,尝试用乘法原理快速计算组合之间有多少种可能存在的方案,思考出计算的公式,这道题就能做出来了。

字符串类型的题目最重要的地方在于多积累,除了一些用模版定式的算法,其他类型的题目大多都需要大量的积累,当下次遇到类似的题目,我大脑 dfs 解决方案的时候就会遍历到这个思路。

视频实况

【【LeetCode】每日一题 2024_9_25 公司命名(字符串、乘法原理)】

每天进步一点点

举报

相关推荐

0 条评论