是 Anagram,为什么 - 97? - Javascript

IsAnagram, why - 97? - Javascript

我试图理解这个 isAnagram 算法,其中两个单词需要具有相同的长度和相同的字母, 有人知道为什么需要 -97 吗? 这个数字是从哪里来的?

为什么一定要是数字 97?

var isAnagram = function(s, t) {
    if (s.length !== t.length) return false;
    
    let checkArray = new Array(26).fill(0);
    
    for (let i = 0; i < s.length; i++) {
        checkArray[s.charCodeAt(i) - 97]++;
    }
    
    for (let x = 0; x < t.length; x++) {
        checkArray[t.charCodeAt(x) - 97]--;
    }
    
    for (let k = 0; k < 26; k++) {
        if (checkArray[k] !== 0) return false;
    }
    
    return true;
    
};

console.log('Anagram: ', isAnagram("anagram","nagaram"))

97是小写字母'a'的ASCII码。通过减去 97,它将小写字母 a-z 映射到整数 0..25,这是分配数组中的有效索引。

严格来说不是必需的。您可以使用更大的数组(例如大小为 128 的数组)来处理所有 ASCII。那么你就不需要减去任何东西了。