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% 的用户
实践证明当映射为有序有限单个数字或字符时,直接使用数组效果更好
作者介绍
j
jaryue
V1