給定兩個字串 s 和 t ,編寫乙個函式來判斷 t 是否是 s 的字母異位詞。
示例 1:
輸入: s =
"anagram"
, t =
"nagaram"
輸出:true
示例 2:
輸入: s =
"rat"
, t =
"car"
輸出:false
說明:
你可以假設字串只包含小寫字母。
t 是 s 的異位詞等價於「兩個字串排序後相等」。因此我們可以對字串 s 和 t 分別排序,看排序後的字串是否相等即可判斷。此外,如果 s 和 t 的長度不同,t 必然不是 s 的異位詞。
class
solution
char
str1 = s.
tochararray()
;char
str2 = t.
tochararray()
; arrays.
sort
(str1)
; arrays.
sort
(str2)
;return arrays.
equals
(str1, str2);}
}
複雜度分析
從另乙個角度考慮,t 是 s 的異位詞等價於「兩個字串中字元出現的種類和次數均相等」。由於字串只包含 26 個小寫字母,因此我們可以維護乙個長度為 26 的頻次陣列table,先遍歷記錄字串 s 中字元出現的頻次,然後遍歷字串 t,減去 table 中對應的頻次,如果出現 table[i]<0,則說明 t 包含乙個不在 s 中的額外字元,返回 false 即可。
高階問題的核心點在於「字元是離散未知的」,因此我們用雜湊表維護對應字元的頻次即可。同時讀者需要注意 unicode 乙個字元可能對應多個位元組的問題,不同語言對於字串讀取處理的方式是不同的。
class
solution
maptable =
newhashmap
();for
(int i =
0; i < s.
length()
; i++
)for
(int i =
0; i < t.
length()
; i++)}
return
true;}
}
複雜度分析
時間複雜度:o(n),其中 n 為 s 的長度。
空間複雜度:o(s),其中 s 為字符集大小,此處 s=26。
LeetCode有效的字母異位詞
給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的乙個字母異位詞。示例 1 輸入 s anagram t nagaram 輸出 true 示例 2 輸入 s rat t car 輸出 false 說明 你可以假設字串只包含小寫字母。高階 如果輸入字串包含 unicode 字元怎麼辦?你...
LeetCode 有效的字母異位詞
給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的字母異位詞。示例 1 輸入 s anagram t nagaram 輸出 true示例 2 輸入 s rat t car 輸出 false說明 你可以假設字串只包含小寫字母。高階 如果輸入字串包含 unicode 字元怎麼辦?你能否調整...
leetcode 有效的字母異位詞
方法一 暴力法 class solution def isanagram self,s str,t str bool return sorted s sorted t 方法二 分開比較 長度 去重 字元個數 class solution def isanagram self,s str,t str ...