Во время чтения одной книги под названием Cracking the coding interview
по Gayle Laakmann
, я наткнулся на этот вопросУдаление дубликатов из массива символов
разработать алгоритм и написать код для удаления дубликатов символов в строке без использования какого-либо дополнительного буфера. ПРИМЕЧАНИЕ. Одна или две дополнительные переменные являются точными. Дополнительная копия массива - нет.
и этот код: -
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;
}
который должен удалить дубликаты символов из массива. Кажется, я не понимаю, что делает алгоритм, заменяя тот же символ снова и снова. Я думал, что только я чувствую, что алгоритм не работает, но на самом деле, когда я запускаю этот код, он дает мне неправильные результаты. Это серьезная ошибка в книге или я не понял вопрос?
этот код также не выполняется, если вход «аа» –
для полукокса [] = {ул «а», «а»}; он дает [a,] – EMM