是 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。那么你就不需要减去任何东西了。
我试图理解这个 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。那么你就不需要减去任何东西了。