JSFiddle - React, Tailwind, and code Playground

by moeishaa

JavaScript

function distance(a, b) {
    if (a.indexOf(b) >= 0) return 100;

    var start = 0,
        aLen = a.length,
        bLen = b.length,
        minDistance = Number.MAX_VALUE,
        end = Math.min(1.5 * bLen, aLen - 1);

    while (true) {
        var done = end >= aLen;

        if (done) {
            end = aLen;
            start = Math.max(0, end - 1.5 * bLen);
        }

        var candid = a.substring(start, end);

        for (var i = 0; i <= candid.length - bLen; i++) {
            var str = candid.substring(i, bLen + i),
                dis = 0;

            for (var j=0; j < str.length && dis < minDistance; j++) {
                dis += str.charAt(j) == b.charAt(j) ? 0 : 1;
            }

            minDistance = dis;
        }

        if (done) {
            break;
        }

        start += 0.5 * bLen;
        end += 0.5 * bLen;
    }

    return (1 - minDistance / bLen) * 100;
}