サーバサイドでやらなくてもいいようなケースに遭遇したら、
この負荷をクライアント側にやらせられるのはわりと意味があると思う。
function similar_text(text1, text2)
{
function similar_char(text1, len1, text2, len2)
{
function similar_str(text1, len1, text2, len2)
{
var pos1 = 0, pos2 = 0, max = 0, i, j, l;
for (i = 0; i < len1; ++i)
{
for (j = 0; j < len2; ++j)
{
for (l = 0; (i + l < len1)&&(j + l < len2)&&
(text1.charAt(i+l) == text2.charAt(j+l)); ++l);
if (l > max)
{
max = l;
pos1 = i;
pos2 = j;
}
}
}
return {
'pos1': pos1,
'pos2': pos2,
'max': max
};
}
var r = similar_str(text1, len1, text2, len2);
var sum = r.max;
if (sum)
{
if (r.pos1 && r.pos2)
{
sum += similar_char(text1, r.pos1, text2, r.pos2);
}
if((r.pos1 + r.max < len1)&&(r.pos2 + r.max < len2))
{
sum += similar_char(
text1.substr(r.pos1 + r.max),
len1 - r.pos1 - r.max,
text2.substr(r.pos2 + r.max),
len2 - r.pos2 - r.max);
}
}
return sum;
}
var sim = similar_char(text1, text1.length, text2, text2.length);
return {
'similar': sim,
'percent': sim * 200.0 / (text1.length + text2.length)
};
}