LeetCode有效的字母異位詞 242

2021-10-22 20:57:01 字數 1387 閱讀 4435

給定兩個字串 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 ...