// SOLUTION 1 - MY (DISCOVERED) SOLUTION (RUNTIME - 104MS, 44.9 MB)
var isAnagram = function(s, t) {
// set function to split, sort, and rejoin characters in a string
const sortString = (str) => {
return str.split("").sort().join("");
}
// regex removes any non-alphabet characters in the string and makes it lowercase
s = s.replace(/[^\w]/g, '').toLowerCase()
t = t.replace(/[^\w]/g, '').toLowerCase()
// final comparison
return sortString(s) === sortString(t)
// ATTEMPT 1
// let anagram = []
// return false is lengths don't match
// if (s.length !== t.length) return false;
// else {
// for (let i = 0; i < s.length; i++) {
// let arrT = t.split("")
// let newArrT;
// if (arrT.includes(s.charAt(i))) {
// let index = arrT.indexOf(s.charAt(i));
// console.log("s char: ", s.charAt(i));
// console.log("index: ", index);
// anagram.push(s.charAt(i))
// console.log("splice: ", arrT.splice(index, 1))
// arrT.splice(index, 0)
// newArrT = arrT
// console.log("newArr: ", newArrT)
// };
// };
// }
// console.log(anagram)
// return anagram.join("") === s;
}
// SOLTUION 2 - (BEST RUNTIME - 60MS)
var isAnagram = function(s, t) {
const key = w => Object.entries([...w].reduce((a, c) => {
if (!(c in a)) a[c] = 0;
a[c] += 1;
return a;
}, {})).sort(([c1], [c2]) => c1.localeCompare(c2)).flat().join('');
return key(s) === key(t);
};
// SOLUTION 3 - (RUNTIME - 72MS)
var isAnagram = function(s, t) {
if(s.length !== t.length) return false;
let map = {};
for(let item of s) {
map[item] = map[item] + 1 || 1;
}
for(let item of t) {
if(!map[item]) return false;
else map[item]--;
}
return true;
};
Comments