兩個單詞若是包含相同的字母,次序不一樣,則稱爲字母易位詞(anagram)。例如,「silent」和「listen」是字母易位詞,而「apple」和「aplee」不是易位詞。請定義函數檢查兩個單詞是不是字母易位詞。能夠假設兩個單詞字母均爲小寫。要求算法複雜度儘可能低javascript
* Solution.jsjava
/* 兩個單詞若是包含相同的字母,次序不一樣,則稱爲字母易位詞(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.jsnode
var Solution = require('./Solution')
console.log(Solution.anagram('silent', 'listen'));
console.log(Solution.anagram('apple', 'aplee'));算法
E:\code\node>node index.js
true
falseapp