242. 有效的字母異位詞

給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。

示例 1:

輸入: s = “anagram”, t = “nagaram”
輸出: true
示例 2:

輸入: s = “rat”, t = “car”
輸出: false
說明:
你可以假設字符串只包含小寫字母。

進階:
如果輸入字符串包含 unicode 字符怎麼辦?你能否調整你的解法來應對這種情況?

首先想到的是計數,用dict/Map(python是哈希表)記錄每個字符出現次數,再比較:

class Solution:
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        s1 = {}
        t1 = {}

        if len(s) != len(t):
            return  False
        for i in range(len(s)):
            if s[i] in s1:
                s1[s[i]] +=1
            else:
                s1[s[i]] = 1

            if t[i] in t1:
                t1[t[i]] +=1
            else:
                t1[t[i]] = 1

        if s1 == t1:
            return True
        else:
            return False

O(n) 的時間複雜度。才50% ,看看怎麼改進,想到了可以直接排序,然後比較正序字符

    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        return sorted(s) == sorted(t)

這種時間複雜度是 O(nlogn )才10-30% ,瘋狂的縮減了方法1的代碼:

def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        s1,t1 = {},{}
        for i in s:
            s1[i] =s1.get(i,0)+1
        for i in t:
            t1[i] =t1.get(i,0)+1
        return s1 == t1

用時差不多 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章