以下代码(来自 Gaale Laakman 的“Cracking the code interview”)展示了如何在不使用数组副本的情况下删除 char 数组中的重复字符以避免一些额外的内存使用。它用偏移量重新写入第一个数组中的最后一个字符。由于最后的数组比前一个小,所以在最后一个字符之后的位置设置了一个空字符,就好像数组停在那里一样:
str[tail] = 0;
我想知道这样做是否会改变数组的变量“长度”。如果没有,我不明白为什么这个例子有效。或者这只是一个示例,我们将检查空字符在哪里以查找数组的长度并且不使用有问题的长度变量?
这是整个代码:
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;
}