Group Anagrams
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
思路
这个题想要我们求解的其实是能否判断一个字符串是否由某些字符排列组成。
我的思路就是把一个字符串中的每个字符的ASCII码映射到一个整数的索引 ,
把索引处的bit设置为1,然后我们判断根据字符串得到的这个整数是否相等,相等即说明两个字符串是满足上述的。
代码
func SetBitToOne(args ...uint32) uint32 {
var ret uint32
for _, num := range args {
ret = ret | (1 << num)
}
return ret
}
func groupAnagrams(strs []string) [][]string {
ret := make([][]string, len(strs))
comp := make(map[uint32]uint32)
var index uint32 = 0
for _, str := range strs {
var pos []uint32
for i, _ := range str {
pos = append(pos, uint32(int(str[i])-int('a')))
}
val := SetBitToOne(pos...)
fmt.Println(str, "val", val)
ind, ok := comp[val]
if !ok {
comp[val] = index
ret[index] = append(ret[index], str)
index++
} else {
ret[ind] = append(ret[ind], str)
}
}
return ret[:index]
}
关于作者
大四学生一枚,分析数据结构,面试题,golang,C语言等知识。QQ交流群:521625004。微信公众号:后台技术栈。