【发布时间】:2011-03-24 19:29:48
【问题描述】:
在阅读Gayle Laakmann 的一本名为Cracking the coding interview 的书时,我遇到了这个问题
设计一个算法并编写代码来去除重复字符 在不使用任何额外缓冲区的字符串中。注意:一两个 附加变量很好。没有额外的数组副本。
还有这段代码:-
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;
}
应该从数组中删除重复字符。通过一次又一次地替换同一个字符,我似乎并不理解算法在做什么。我以为只有我觉得算法不起作用,但事实上,当我运行这段代码时,它给了我错误的输出。这是书中的严重错误还是我没有理解这个问题?
【问题讨论】: