給定兩個字符串 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
用時差不多 。