Durante la lectura de un libro llamado Cracking the coding interview
por Gayle Laakmann
, me encontré con esta preguntaExtracción de carácter duplicado de la matriz
Diseño de un algoritmo y escribir código para eliminar los caracteres duplicados en una cadena sin necesidad de utilizar cualquier tampón adicional. NOTA: Una o dos variables adicionales están bien. Una copia extra de la matriz no es.
y este código: -
public static void removeDuplicates(char[] str) {
if (str == null) {
return;
}
int len = str.length;
if (len < 2) {
return;
}
int tail = 1;
for (int i = 1; i < len; ++i) {
int j;
for (j = 0; j < tail; ++j) {
if (str[i] == str[j]) {
break;
}
}
if (j == tail) {
str[tail] = str[i];
++tail;
}
}
str[tail] = 0;
}
que se supone que para eliminar el carácter duplicado de la matriz. No me parece tranquilo entender lo que está haciendo el algoritmo al reemplazar al mismo personaje una y otra vez. Pensé que solo soy yo quien siente que el algoritmo no funciona, pero de hecho cuando ejecuté este código me está dando resultados incorrectos. ¿Es este error grave en el libro o no he entendido la pregunta?
este código también falla si la entrada es "aa" –
para char [] str = { 'a', 'a'}; da [a,] – EMM