將兩個字串先轉化為陣列,然後再進行陣列的排序,最後再轉化成字串進行===的比較。
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 類似雜湊 還是重複問題 首先需要明白題的意思,其實就是比較兩個字串中字母是否相同,在相同的情況下比較該字元...