哈希表-有效的字母异位词

72 阅读1分钟

给定两个字符串 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