Group Anagrams

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/king_qg/article/details/82940015

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]
}

猜你喜欢

转载自blog.csdn.net/king_qg/article/details/82940015