【发布时间】:2015-10-11 13:51:49
【问题描述】:
我正在做《Cracking The Coding Interview》一书中的练习,我正在尝试确定字符串中是否存在重复字符。我正在使用 ArrayList 数据结构。我的方法是返回类型布尔,如果有重复则返回true,如果没有重复字符则返回false。我添加了第三条 return 语句,以便程序可以编译,但它总是返回 false。
import java.util.*;
public class QuestionOneCrackingCode {
public static void main(String[] args) {
String s = "abcdefga";
ArrayList<String> c = new ArrayList<String>();
c.add(s);
System.out.print(check(c));
}
public static boolean check(ArrayList<String> g) {
for (int i = 0; i < g.size(); i++) {
for (int j = i + 1; j < g.size(); j++) {
if (g.get(i) == g.get(j)) {
return true;
} else {
return false;
}
}
}
return false;
}
}
【问题讨论】:
-
注意
if (...) { return true; } else { return false; }可以简化为return ...;。 -
我建议做一些更简单的事情:查看
String内部,对当前字符使用char变量,然后从当前位置到最后一个位置或从当前位置到首先。这样可以节省时间并且更容易编码。 -
@LuiggiMendoza 我不认为这是正确的欺骗 - 即使他切换到
.equals()它也行不通 - 真正的问题是他期望c.add(s)将字符串拆分为当它实际上只会导致原始字符串的单项列表时,字符甚至不会与任何内容进行比较。如果他真的在比较字符,==是正确的 -
@CupawnTae 好吧,这个实现还有更多问题。我将重新提出问题。请提供一个使用这个 now non-dup 的答案。
-
@CupawnTae OP 比较的是
Strings,而不是chars,检查参数:ArrayList<String> g及其用法:g.get(i)。
标签: java string arraylist char