I am having some problems trying to replace 3 consecutive duplicate char characters in an array. I want to find those 3 values and replaces them with x’s. So far this is what I have:
public static char[] replaceSets(char [] input) {
for (int i = 0; i < input.length; i++) {
for(int j = i+1; j < input.length; j++)
for(int k = j+1; k < input.length; k++) {
if ((input[i] == input[j]) && (input[j] == input[k])) {
input[i] = 'x';
input[j] = 'x';
input[k] = 'x';
}
}
}
return input;
}
However, if I have:
char[] input = {'r','y','y','r','r','g','b','y','y','y','r','g'};
It prints out:
xxxxxgbxyyrg
But, it should be:
ryyrrgbxxxrg
Advertisement
Answer
You do not need 3 loops to do this. You can take the following approach:
public static char[] replaceSets(char[] input) {
if (input.length < 3) {
return input;
}
for (int i = 0; i < input.length - 3; ++i) {
if (input[i] == input[i + 1] && input[i + 1] == input[i + 2]) {
input[i] = 'x';
input[i + 1] = 'x';
input[i + 2] = 'x';
i += 2;
}
}
return input;
}
The function loops over the character array and tries to compare if characters at i, i + 1, i + 2 positions are same. If so simply replace them with 'x'.