字母易位词(anagram)

题目来源:

https://blog.csdn.net/csdn_bang/article/details/83044235

两个单词如果包含相同的字母,次序不同,则称为字母易位词(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);
}

exports.Solution = Solution;

* index.js

var Solution = require('./Solution').Solution;
console.log(Solution.anagram('silent', 'listen'));
console.log(Solution.anagram('apple', 'aplee'));

E:\code\node>node index.js
true
false

猜你喜欢

转载自blog.csdn.net/fareast_mzh/article/details/83059561