// 242.有效的字母异位词
package main
import "fmt"
func isAnagram(s string, t string) bool {
hash := [26]int{} //初始化数组,元素为全0
for _, v := range s { //字符串的遍历,v为rune类型
hash[v-rune('a')]++ //rune('a') 'a'为uint8类型(ASCII码),需要转换为rune类型
}
for _, v := range t {
hash[v-rune('a')]--
}
for _, v := range hash { //方法1:判断hash数组是否全为0
if v != 0 {
return false
}
}
return true
// if hash == [26]int{} { //方法2:判断hash数组是否为全0
// return true
// } else {
// return false
// }
}
func main() {
s := "anagram"
t := "nagaram"
b := isAnagram(s, t)
fmt.Printf("b: %v\n", b)//b:true
}
// 349. 两个数组的交集
package main
import "fmt"
func intersection(nums1 []int, nums2 []int) []int {
set := make(map[int]int, 0) // 用map模拟set,注意初始化map的方法
res := make([]int, 0)
for _, k := range nums1 { //注意if _, ok := set[v]有两个返回值,如果v对应有值,返回该值,ok=true;否则返回0,ok=false
if _, ok := set[k]; !ok { //!ok相当于只统计1次作对nums1去重
set[k]++
}
}
for _, k := range nums2 {
//如果存在于上一个数组中,则加入结果集,并使计数减1,即去重
if set[k] > 0 {
res = append(res, k)
set[k]-- //相当于只统计1次作对nums2去重
}
}
return res
}
func main() {
s1 := []int{3, 2, 3, 7, 5}
s2 := []int{6, 2, 2, 4, 5}
fmt.Printf("intersection(s1, s2): %v\n", intersection(s1, s2))//intersection(2, 5)
}
//208.快乐数
package main
import "fmt"
func isHappy(n int) bool {
hash := make(map[int]bool)
for n != 1 && !hash[n] { //注意这里用for hash[n]为true说明元素出现过,对应!hash[n]为false 即发生了循环
n, hash[n] = getSum(n), true //19:true 建立hash映射
}
return n == 1
}
func getSum(n int) int { //求各位置元素的平方和
sum := 0
for n > 0 {
sum += (n % 10) * (n % 10)
n = n / 10
}
return sum
}
func main() {
n := 19
res := isHappy(n)
fmt.Printf("res: %v\n", res) //res: true
}
//1. 两数之和
package main
import "fmt"
func twoSum(nums []int, target int) []int {
set := make(map[int]int, 0)
res := make([]int, 0)
for i, v := range nums {
s := target - v //s为目标元素
if val, ok := set[s]; ok { //如果目标元素s被map遍历过,取出两个下标放入结果集
res = append(res, val)
res = append(res, i)
} else { //如果目标元素s未被遍历过,将现在正在遍历到的元素v和v的下标存入map中
set[v] = i
}
}
return res
}
func main() {
nums := []int{3, 2, 4}
res := twoSum(nums, 6)
fmt.Printf("res: %v\n", res) //res: [1 2]
}