两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram)。例如,“silent”和“listen”是字母易位词,而“apple”和“aplee”不是易位词。请定义函数检查两个单词是否是字母易位词。可以假设两个单词字母均为小写。要求算法复杂度尽量低
* Solution.js
/*
两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram)。
例如,“silent”和“listen”是字母易位词,而“apple”和“aplee”不是易位词。
请定义函数检查两个单词是否是字母易位词。可以假设两个单词字母均为小写。
要求算法复杂度尽量低。
*/
function Solution() {}
Array.prototype.equals = function(a) {
if (a.length !== this.length)
return false;
for (var i = 0; i <this.length; i++) {
if (this[i] !== a[i]) {
return false;
}
}
return true;
}
Solution.anagram = function(s1, s2) {
const ALEPH = 26;
var c1 = new Array(ALEPH), c2 = new Array(ALEPH);
for (var i = 0; i < c1.length; i++) {
c1[i] = c2[i] = 0;
}
var a1 = s1.split('').map(function(c) {
return (c.charCodeAt(0) | 0x20) - 97;
}), a2 = s2.split('').map(function(c) {
return (c.charCodeAt(0) | 0x20) - 97;
});
a1.forEach(function(c) {
c1[c]++;
});
a2.forEach(function(c) {
c2[c]++;
});
return c1.equals(c2);
}
module.exports = Solution;
* index.js
var Solution = require('./Solution')
console.log(Solution.anagram('silent', 'listen'));
console.log(Solution.anagram('apple', 'aplee'));
E:\code\node>node index.js
true
false