一.題目
給定兩個字串 s 和 t ,編寫乙個函式來判斷 t 是否是 s 的乙個字母異位詞。
示例 1:
輸入: s = "anagram", t = "nagaram"
輸出: true
示例 2:
輸入: s = "rat", t = "car"
輸出: false
說明:
你可以假設字串只包含小寫字母。
高階:
如果輸入字串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?
二.思路和**
1.為每個字串建立hash table,然後迴圈某字串,如果某乙個元素同時也在另乙個字串裡,那麼同時刪除兩個雜湊表的這一項。最後判斷兩個hash table 是否都為空。執行時間有點長,但可以過。
class solution:
def isanagram(self, s, t):
""":type s: str
:type t: str
:rtype: bool
"""if len(s) != len(t):
return false
else:
hash_table_s = {}
hash_table_t = {}
for i in s:
if ord(i) in hash_table_s:
hash_table_s[ord(i)] += 1
else:
hash_table_s[ord(i)] = 1
for j in t:
if ord(j) in hash_table_t:
hash_table_t[ord(j)] += 1
else:
hash_table_t[ord(j)] = 1
for c in s:
if ord(c) in hash_table_t:
if hash_table_s[ord(c)] == 1:
hash_table_s.pop(ord(c))
else:
hash_table_s[ord(c)] -= 1
if hash_table_t[ord(c)] == 1:
hash_table_t.pop(ord(c))
else:
hash_table_t[ord(c)] -= 1
if hash_table_s == {} and hash_table_t == {}:
return true
else:
return false
2. 使用題目內部邏輯構造判斷語句:對於字母異位詞我們可以看出有兩個條件可以限定,第一是兩串字串出現的字母相同,第二是這些字母出現的次數相同。
對於第乙個限定條件可以用set()來解決;第二個限定條件可以使用字串的count() 方法。
return (set(s) == set(t) and all(s.count(i) == t.count(i) for i in set(s)))
all() 函式用於判斷給定的可迭代引數 iterable 中的所有元素是否都為true,如果是返回 true,否則返回 false (返回的是乙個bool值)。與之對應的的還有any(): 只要可迭代引數iterable有乙個是true那麼就返回true。
元素除了是 0、空、false 外都算true。
from:
242 有效的字母異位詞
給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的乙個字母異位詞。示例 1 輸入 s anagram t nagaram 輸出 true示例 2 輸入 s rat t car 輸出 false說明 你可以假設字串只包含小寫字母。class solution object def isa...
242 有效的字母異位詞
給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的乙個字母異位詞。示例 1 輸入 s anagram t nagaram 輸出 true 示例 2 輸入 s rat t car 輸出 false 說明 你可以假設字串只包含小寫字母。class solution def isanagra...
242 有效的字母異位詞
給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的乙個字母異位詞。輸入 s anagram t nagaram 輸出 true輸入 s rat t car 輸出 false方法1 類似雜湊 還是重複問題 首先需要明白題的意思,其實就是比較兩個字串中字母是否相同,在相同的情況下比較該字元...