2021-09-25:给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指字母相同,但排列不同的字符串。示例 1:输入: strs = [“eat“, “tea“, “
2021-09-25:给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指字母相同,但排列不同的字符串。示例 1:输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]。示例 2:输入: strs = [""],输出: [[""]]。示例 3:输入: strs = [“a”],输出: [[“a”]]。
福大大 答案2021-09-25:
自然智慧。
方法一:对字符串排序,放哈希表。
方法二:记字符串的字符个数,放哈希表。
这两种方法,本质都是一样的。
代码用golang编写。代码如下:
package main
import (
"fmt"
"sort"
)
func main() {
strs := []string{"eat", "tea", "tan", "ate", "nat", "bat"}
ret := groupAnagrams1(strs)
fmt.Println(ret)
ret = groupAnagrams2(strs)
fmt.Println(ret)
}
func groupAnagrams1(strs []string) [][]string {
map0 := make(map[string][]string)
for _, str := range strs {
record := make([]int, 26)
for _, cha := range str {
record[cha-'a']++
}
builder := make([]byte, 0)
for _, value := range record {
builder = append(builder, fmt.Sprintf("%d", value)...)
builder = append(builder, "_"...)
}
key := string(builder)
if _, ok := map0[key]; !ok {
map0[key] = make([]string, 0)
}
map0[key] = append(map0[key], str)
}
res := make([][]string, 0)
for _, list0 := range map0 {
res = append(res, list0)
}
return res
}
func groupAnagrams2(strs []string) [][]string {
map0 := make(map[string][]string)
for _, str := range strs {
chs := []byte(str)
sort.Slice(chs, func(i, j int) bool {
return chs[i] < chs[j]
})
key := string(chs)
if _, ok := map0[key]; !ok {
map0[key] = make([]string, 0)
}
map0[key] = append(map0[key], str)
}
res := make([][]string, 0)
for _, list0 := range map0 {
res = append(res, list0)
}
return res
}
执行结果如下:
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-09-25 2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】请问p1和p2是同一个对象吗?