【发布时间】:2010-04-08 07:06:55
【问题描述】:
以下代码试图删除字符串中的所有重复字符。我不确定代码是否正确。谁能帮我处理代码(即当字符匹配时实际发生了什么)?
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;
}
【问题讨论】:
-
这是《破解代码面试》一书第 97 页中的练习之一。“编写代码以删除字符串中的重复字符不使用任何额外的缓冲区”。注意:一两个附加变量就可以了。没有额外的数组副本。
-
@FranklinDattein 你能建议一下吗,为什么这段代码返回:abbab 输入:aabbab?