Il s'agit d'un [problème de recherche d'union] : https://leetcode.com/problems/similar-string-groups/
Si je change la ligne parents[find(j)] = i;
sur parents[find(i)] = j;
le code entraînera un débordement de pile. Apparemment, le chemin est trop profond pour la méthode récursive find(). Mais je ne peux pas dire quelle différence fait ce changement. Quelqu'un peut-il m'aider ?
class Solution {
int[] parents;
public int numSimilarGroups(String[] A) {
parents = new int[A.length];
for(int i = 0;i < parents.length;i++) {
parents[i] = i;
}
for(int i = 0;i < A.length;i++) {
for(int j = 0;j < i;j++) {
if(similar(A[i],A[j])) {
parents[find(j)] = i;
}
}
}
int ans = 0;
for(int i = 0;i < parents.length;i++) {
if(parents[i] == i)
ans++;
}
return ans;
}
private int find(int curr) {
int p = parents[curr];
if(p != curr) {
int pp = find(p);
parents[curr] = pp;
}
return parents[curr];
}
private boolean similar(String a, String b) {
int diff = 0;
int i = 0;
boolean consecutive = false;
while(diff <= 2 && i < a.length()) {
if(a.charAt(i) != b.charAt(i))
diff++;
if(i > 0 && a.charAt(i) == a.charAt(i-1))
consecutive = true;
i++;
}
return diff == 2 || diff == 0 && consecutive;
}
}