242 有效的字母異位詞

2022-08-30 06:27:07 字數 1347 閱讀 1376

將兩個字串先轉化為陣列,然後再進行陣列的排序,最後再轉化成字串進行===的比較。

var isanagram = function(s, t) 

return false;

};//此種思路若 js api 用的溜,兩行**搞定

var isanagram = function(s, t)

這種方法固然可以,但是該方法的時間複雜度是 js 陣列內建排序演算法的時間複雜度,最好的也是 o(nlogn),空間複雜度為:o(n)

該方法是在一次面試中,面試官提醒說時間複雜度為 o(n) 時提醒的一種思路。

就是,使用雜湊的方式,從字串對映成物件,物件的 key 是字元,對應的 value 是該字元出現的次數,然後再比較兩個物件是否相等就可以了。

var isanagram = function(s, t) , tobj = {};

for(let i = 0; i < s.length; i++)else

if(tobj[t[i]] != undefined)else

}for(let obj in sobj)

return true

};

這種方式要比前一種好些,該方法的時間複雜度為 o(n),空間複雜度為 o(n)

這種方法是在 leetcode 上看到的大多數人的做法,就是將 26 個小寫英文本元一一對應陣列的 index,陣列的值為當 s 中該字元出現時加1,當 t 中該字元出現時減1,最後判斷陣列中每一項結果是否為 0 即可。

var isanagram = function(s, t) 

for(let i = 0; i < arr.length; i++)

return true

};

但是這種方法有侷限性,就像問題中高階問題寫的,當字串中不只是有小寫字母,而是有所有字元時,這種方式就不能通用了。

在解法二和解法三的基礎上進行取其精華去其糟粕,得到另一種解題方法如下:

var isanagram = function(s, t) 

for(let i = 0; i < s.length; i++)else

if(obj[t[i]] === undefined)else

}for(let key in obj)

return true

};

這種是結合了第三種解題方法的思路,用在了第二種解題方法中,和第二種效率差不多。

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 類似雜湊 還是重複問題 首先需要明白題的意思,其實就是比較兩個字串中字母是否相同,在相同的情況下比較該字元...