字母易位词(anagram)

 

两个单词若是包含相同的字母,次序不一样,则称为字母易位词(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

相关文章
相关标签/搜索