给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意: 若 s 和 t **中每个字符出现的次数都相同,则称 s 和 t **互为字母异位词。
对应力扣 242 题
解法一:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
return s.length === t.length && [...s].sort().join('') === [...t].sort().join('')
};
如上所示首先比较长度是否相同,然后解构成数组后排序拼接成字符串比较是否相同,这种解法我们一眼就能够看懂
解法二:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if (s.length !== t.length ) {
return false;
}
let helperArr = new Array(26).fill(0);
let pivot = 'a'.charCodeAt(0);
for(let i = 0, length = s.length; i < length; i++) {
helperArr[s.charCodeAt(i) - pivot]++;
helperArr[t.charCodeAt(i) - pivot]--;
}
return helperArr.every(i => i === 0);
};
如上所示,首先charCodeAt介绍是 返回值是在字符串中的给定索引的编码单元体现的数字,如果在索引处没找到元素则返回 undefined 。
我们定义一个数组长度为26(一共有26个字母)初始化都是0,然后我们遍历 s 和 t,遍历 s 我们对对应位置的字母加1, 遍历 t 我们对对应的字母减1,只要某个字母在在两个字符串出现的次数相同,那么如此加减最终还是能保持是0