算法题
哈希表(hash map)
有效的字母异位词

有效的字母异位词

题目

给定两个字符串 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
}