剑指 Offer II 117. 相似的字符串
var pi = find(i) 读取i的value
var pj = find(j) 读取j的value
if (check(i, j)) { 检验i 和 j 位置的字符串是否是 相似的
parent[pi] = pj 具备相似性,那么让 pi去跟踪 pj,让他们具有关联性
function find(i) { 读取参数i的value值,一般情况下读取parent[i],但是如果发现parent[i] !== i,那么我们需要进一步查询parent[i]的位置,就这样递归查询下去直到遇到parent === parent[i]返回结果
function check(i, j) { 遍历字符串,比较两个字符串同一位置的字符不相等的个数超过了2,则不是
var numSimilarGroups = function (strs) {
var len = strs.length;
var parent = new Array(len).fill().map((v, i) => i)
for (var i = 0; i < len; i++) {
for (var j = i + 1; j < len; j++) {
var pi = find(i)
var pj = find(j)
if (check(i, j)) {
parent[pi] = pj
}
}
}
var res = 0;
for (var i = 0; i < len; i++) {
if (parent[i] == i) {
res++
}
}
return res
function find(i) {
var value = parent[i]
if (value !== i) {
parent[i] = find(value)
}
return parent[i]
}
function check(i, j) {
var str1 = strs[i]
var str2 = strs[j]
var num = 0;
for (var k = 0; k < str1.length; k++) {
if (str1[k] !== str2[k]) num++
if (num > 2) return false
}
return true
}
};