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
相关文章推荐
- leetcode初级算法字符串4 有效的字母异位词
- LeetCode-探索-初级-字符串-有效的字母异位词-java
- [leetcode]有效的字母异位词[javascript]
- leetcode 242 有效的字母异位词
- 【PHP解法==LeetCode滑动窗口类型问题】438.找到字符串中所有字母异位词 && 209.长度最小的子数组 && 76.最小覆盖子串(Hard)
- 【初级算法】15. 有效的字母异位词
- leetcode之242有效的字母异位词
- golang_算法: leetcode_字符串05-验证回文字符串
- leetcode-有效的字母异位词
- LeetCode242有效的字母异位词
- [Leetcode] 242. 有效的字母异位词 java hashmap
- golang_算法: leetcode_字符串07-实现strStr()
- golang_算法: leetcode_字符串09-最长公共前缀
- golang_算法: leetcode_字符串06-字符串转换整数 (atoi)
- Leetcode题库 - 有效的字母异位词(java语言版)
- 【LeetCode】Python实现-242. 有效的字母异位词
- 数据结构——算法之(031)(将字符串中所有小写字母排在大写字母的前面)
- c++中判断字符串只包含字母数字汉字的算法
- LeetCode 8. String to Integer (atoi) C++ --字符串转为数字,包含正负号、空格、字母、数字等字符
- LeetCode 17 电话号码的字母组合(字符串、回溯算法Backtracking、递归Recursive)