【发布时间】:2017-12-06 06:27:32
【问题描述】:
我目前正在完成《Cracking the Coding Interview》,我正在寻找一些关于我可以做些什么来纠正这个算法的建议。它似乎正在处理一些测试用例,但它不适用于测试用例 ['a','a','a','b','b','b] 作为输入。任何想法我做错了什么?谢谢!
预期结果 = ['a','b']
实际结果 = ['a']
/**
* Removes duplicate chars
*
* @param str
*/
public static void removeDuplicates(char[] str) {
if (str.length < 2) {
return;
}
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str.length; j++) {
if ((str[i] == str[j]) && (i != j)) {
str[j] = 0;
}
}
}
}
【问题讨论】:
-
如果您不明白为什么它不起作用,请逐行调试代码。这是一项必不可少的技能。此外,您还没有显示结果应该是什么,也没有显示您实际得到的错误结果。
-
不知道预期的结果应该是什么,我们怎么知道哪里出了问题?用
\0替换重复的字符似乎不太可能是正确的,但是..... -
输入
['a','a','a','b','b','b'],您的方法将数组更新为['a','\0','\0','b','\0','\0']。这就是它应该变成的样子吗?如果是,那么您的代码有效。如果不是,那应该是什么? -
现在该问题显示了预期和实际输出,您的问题一团糟。标题说“不使用额外数组”,但 Java 数组是固定大小的,因此如果不创建新的较短数组,结果不能是
['a','b']或['a']。请澄清一下,当你这样做时,也许这也会让你自己更清楚。 -
@Andreas 是的 - 应该是这样。出于某种原因,Eclipse 只显示“a”......为了澄清使用额外的数组,我的意思是声明像 StringBuilder 对象之类的东西,然后将非重复项转储到其中。结果,这将“删除重复项”,然后我们可以返回一个“删除”重复项的字符串。但是,由于 char[] 是可变的,我可以删除数组中的项目,而无需创建另一个数组/数据结构。
标签: java arrays algorithm char duplicates