字母易位詞(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

相關文章
相關標籤/搜索