大海Online的博客

Looking for Interest

判断两个字符串的相似度(js)

问题来源于 http://weibo.com/1748374882/yavpCkc31

问题:有两个字符串 A 和 B,如何简单高效的判断 A 和 B 的相似度?A 和 B 完全一样,相似度为 100, A 和 B 完全不一样,相似度为 0. A 和 B 中有一半文字相同,相似度为 50. 依此类推。文字中包含中英文,空白字符也算。哪位用 JS 挑战下?性能第一,代码长短无所谓。

function compare(x, y) {
	var z = 0;
	var s = x.length + y.length;;

	x.sort();
	y.sort();
	var a = x.shift();
	var b = y.shift();

	while(a !== undefined && b !== undefined) {
		if (a === b) {
			z++;
			a = x.shift();
			b = y.shift();
		} else if (a < b) {
			a = x.shift();
		} else if (a > b) {
			b = y.shift();
		}
	}
	return z/s * 200;
}

console.log(compare(['123', '中文', 'hello'], ['123', '中文', 'hello']))
console.log(compare(['123', '中文', 'hello'], ['123', '中文', 'hello'].sort()))
console.log(compare(['123', '中文', 'hello'], ['123', '中文', 'hello'].reverse()))
console.log(compare(['123', '中文', 'hello','中2文'], ['12', '中2文', '123','中文3']))
console.log(compare(['123', '中文', 'hello'], ['中文', 'world', '456']))
console.log(compare(['123', '中3文', 'hello'], ['中文', 'world', '汉字']))