1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
func isAnagram(s string, t string) bool {
	if len(s) != len(t) {
		return false
	}
	// 简易hash表
	// 不包含大写,所以能缩小范围到26(通过-a的方式)
	var a [26]int
	var b [26]int
	for _, c := range s {
		a[c-'a']++
	}
	for _, c := range t {
		b[c-'a']++
	}
	return a == b
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
func groupAnagrams(strs []string) [][]string {
	// 没大写字母,压缩到26个数组
	cache := make(map[[26]int][]string)
	for _, str := range strs {
		var key [26]int
		// 一个循环下来,将相应的字母的计数保存到相应的数组位
		for _, c := range str {
			key[c-'a']++
		}
		// 整个key数组就是map的key,然后将相同key的str append起来
		cache[key] = append(cache[key], str)
	}

	var res [][]string
	// 遍历返回即可
	for _, strings := range cache {
		res = append(res, strings)
	}
	return res
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
func twoSum(nums []int, target int) []int {
	cache := map[int]int{}
	for secondIndex, num := range nums {
		if firstIndex, ok := cache[target-num]; ok {
			return []int{firstIndex, secondIndex}
		}
		cache[num] = secondIndex
	}
	return nil
}