有效的异位符
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 来源:力扣(LeetCode) 链接:
// 先排序,再比较
func isAnagram(s string, t string) bool {
a := SortString(s)
b := SortString(t)
return a == b
}
func SortString(w string) string {
s := strings.Split(w, "")
sort.Strings(s)
return strings.Join(s, "")
}
// 哈希
// hash[v]-- 如果原来不存在 则 hash[v]-- 等效于 hash[v] = 0 - 1
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
hash := make(map[rune]int)
for _,v :=range s {
hash[v]++
}
for _,v := range t {
hash[v]--
if hash[v] < 0 {
return false
}
}
return true
}
// 哈希 二
// tt 是 ss 的异位词等价于「两个字符串中字符出现的种类和次数均相等」, 维护两个数组计算每个字符出现的次数,
// 最后比较两个数组
func isAnagram(s string, t string) bool {
var s1 , t1 [26]int
for _,v := range s {
s1[v-'a']++
}
for _,v := range t {
t1[v-'a']++
}
return s1 == t1
}Last updated
Was this helpful?