j

jaryue

V1

2023/03/18阅读:13主题:默认主题

有效的字母异位词

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/valid-anagram 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

建立一个map用于映射字符出现分别在s和t中出现的次数,在s中出现就++ 在t中出现就--如果为0就删除,最后判断map是否为0就可以了

代码示例

func isAnagram(s string, t string) bool {
    if len(s)!=len(t) {
  return false
 }
 m := make(map[byte]int)
 for i := 0; i < len(s); i++ {
  if m[s[i]]==-1 {
   delete(m,s[i])
  }else {
   m[s[i]] = m[s[i]] + 1
  }
  if m[t[i]]==1 {
   delete(m,t[i])
  }else {
   m[t[i]] = m[t[i]] - 1
  }
 }
 if len(m)==0 {
  return true
 } else {
  return false
 }
}

执行结果

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 16 ms , 在所有 Go 提交中击败了 14.98% 的用户 内存消耗: 2.6 MB , 在所有 Go 提交中击败了 42.13% 的用户 通过测试用例: 38 / 38 炫耀一下:

更多

方法2 哈希映射2 与我的方法的差异是,官方并没有直接构建map,而是使用两个[26]int来代表26个字母,最后对比两个数组是否相同即可

func isAnagram(s, t string) bool {
    var c1, c2 [26]int
    for _, ch := range s {
        c1[ch-'a']++
    }
    for _, ch := range t {
        c2[ch-'a']++
    }
    return c1 == c2
}

执行用时: 4 ms , 在所有 Go 提交中击败了 69.19% 的用户 内存消耗: 2.6 MB , 在所有 Go 提交中击败了 57.03% 的用户
实践证明当映射为有序有限单个数字或字符时,直接使用数组效果更好

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1