Valid Anagram

有效的字母异位词

题目描述

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

字母异位词指字母相同,但排列不同的字符串。

示例1:

输入:s = "anagram", t = "nagaram"
输出:true

示例2:

输入:s = "rat", t = "car"
输出:false

解法

解法一:排序比较

将两个无序字符串排序,得到两个有序字符串,然后比较字符串是否相等。

解法二:利用数组

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

func isAnagram(s string, t string) bool {
    if len(s) != len(t) {
        return false
    }
    tmp := make([]byte, 26, 26)
    for i := 0; i < len(s); i++ {
        tmp[s[i]-'a']++
        tmp[t[i]-'a']--
    }
    for _, v := range tmp {
        if v != 0 {
            return false
        }
    }
    return true
}

解法三:利用哈希表

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

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

Last updated

Was this helpful?