您的位置:首页 > 编程语言 > Go语言

golang_算法: leetcode_字符串04-有效的字母异位词

2019-03-12 14:33 375 查看
版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/88420318

代码如下:

package main

import "fmt"

//字母异位词,说明每个字母出现的个数都一致
//用slice的话会因为排序的差异出现错误
func isAnagram(s string, t string) bool {
//把 string 转换成 []rune 可以适应 Unicode 字符
bytemap1 := make(map[rune]int)
bytemap2 := make(map[rune]int)
for _, v := range s {
bytemap1[v]++
}
for _, v := range t {
bytemap2[v]++
}
//fmt.Println("bytemap1",bytemap1)
//fmt.Println("bytemap2",bytemap2)
//fmt.Println("byte比较",stringMapEqual(bytemap1, bytemap2))
if stringMapEqual(bytemap1, bytemap2) {
return true
}
return false
}

//判断两个map是否相等的函数
func stringMapEqual(a, b map[rune]int) bool {
if len(a) != len(b) {
return false
}

for k, av := range a {
if bv,ok := b[k]; !ok || bv != av {
return false
}
}

return true
}

func main() {
s := "amagran"
t := "nagaram"
fmt.Println(isAnagram(s, t))
}

另外附上:
判断两个slice相等的函数

func StringSliceEqualBCE(a, b []string) bool {
if len(a) != len(b) {
return false
}

if (a == nil) != (b == nil) {
return false
}

b = b[:len(a)]
for i, v := range a {
if v != b[i] {
return false
}
}

return true
}

这里 ,通过b = b[:len(a)]处的bounds check能够明确保证v != b[i]中的b[i]不会出现越界错误,从而避免了b[i]中的越界检查从而提高效率

参考文章:
Golang比较两个slice是否相等 https://studygolang.com/articles/9699

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: