我的js算法爬坑之旅-相似字符串组

269 阅读1分钟

第一百一十四天:力扣839题,相似字符串组

地址:leetcode-cn.com/problems/si…

思路:并查集

var numSimilarGroups = function(strs) {
    const n = strs.length;
    const m = strs[0].length;
    const f = new Array(n).fill(0).map((element, index) => index);

    for (let i = 0; i < n; i++) {
        for (let j = i + 1; j < n; j++) {
            const fi = find(i), fj = find(j);
            if (fi === fj) {
                continue;
            }
            if (check(strs[i], strs[j], m)) {
                f[fi] = fj;
            }
        }
    }
    let ret = 0;
    for (let i = 0; i < n; i++) {
        if (f[i] === i) {
            ret++;
        }
    }
    return ret;

    function find(x) {
        return f[x] === x ? x : (f[x] = find(f[x]));
    }

    function check(a, b, len) {
        let num = 0;
        for (let i = 0; i < len; i++) {
            if (a[i] !== b[i]) {
                num++;
                if (num > 2) {
                    return false;
                }
            }
        }
        return true;
    }
};

执行用时:112 ms, 在所有 JavaScript 提交中击败了62.50%的用户

内存消耗:41.8 MB, 在所有 JavaScript 提交中击败了50.00%的用户