前言
每天和你一起刷 LeetCode 每日一题~
LeetCode 启动!
题目:leetcode.cn/problems/naming-a-company/description/?envType=daily-question&envId=2024-09-25" rel="nofollow">公司命名
代码与解题思路
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 公司命名(字符串、乘法原理)】
每天进步一点点
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。