将两个字符串先转化为数组,然后再进行数组的排序,最后再转化成字符串进行 === 的比较。
var isAnagram = function(s, t) {
if(s.length != t.length) return false
let sarr = Array.from(s);
let tarr = Array.from(t);
if(sarr.sort().toString() === tarr.sort().toString()){
return true;
}
return false;
};
这种方法固然可以,但是该方法的时间复杂度是 js 数组内置排序算法的时间复杂度,最好的也是 o(nlogn),空间复杂度为:o(n)
该方法是在一次面试中,面试官提醒说时间复杂度为 o(n) 时提醒的一种思路。
就是,使用哈希的方式,从字符串映射成对象,对象的 key 是字符,对应的 value 是该字符出现的次数,然后再比较两个对象是否相等就可以了。
var isAnagram = function(s, t) {
if(s.length != t.length) return false
let sobj = {}, tobj = {};
for(let i = 0; i < s.length; i++){
if(sobj[s[i]] != undefined){
sobj[s[i]]++
}else{
sobj[s[i]] = 1
}
if(tobj[t[i]] != undefined){
tobj[t[i]]++
}else{
tobj[t[i]] = 1
}
}
for(let obj in sobj){
if(sobj[obj] != tobj[obj])
return false
}
return true
};
这种方式要比前一种好些,该方法的时间复杂度为 o(n),空间复杂度为 o(n)
这种方法是在 leetcode 上看到的大多数人的做法,就是将 26 个英文字符
原文:https://www.cnblogs.com/lovevin/p/13620217.html