Удаление дублирующегося символа от массива

В то время как чтение одной книги называют 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;
    }

который, как предполагается, удаляет дублирующийся символ из массива. Я не подавляю шумы, кажется, понимают то, что алгоритм делает путем замены того же символа снова и снова. Я думал, что это - только я, кто чувствует, что алгоритм не работает, но заразите, когда я выполнил этот код, это дает мне неправильно выводы. Эта серьезная ошибка в книге, или разве я не понял вопроса?

6
задан juco 7 April 2013 в 17:26
поделиться