有效的字母异位词
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = "anagram", t = "nagaram" 输出: true
示例 2: 输入: s = "rat", t = "car" 输出: false
说明: 你可以假设字符串只包含小写字母。
思路
先看暴力的解法,两层for循环,同时还要记录字符是否重复出现,很明显时间复杂度是 O(n^2)。
数组其实就是一个简单哈希表,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。
解法
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
record := [26]int{}
for _, r := range s {
record[r-rune('a')]++
}
for _, r := range t {
record[r-rune('a')]--
}
// record数组如果有的元素不为零0,说明字符串s和t一定是谁多了字符或者谁少了字符。
return record == [26]int{}
}
只对字符串进行一次遍历的写法:
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
record := [26]int{}
for i := 0; i < len(s); i++ {
record[s[i]-'a']++
record[t[i]-'a']--
}
for _, v := range record {
if v != 0 {
return false
}
}
return true
}