我正在尝试解决一个问题,我必须找到字符串的第一个非重复字符。我知道我的解决方案很奇怪或效率很低,但是没有意义的是我设置
char temp = check.get(i);
temp
中的变量似乎不一样
public static Character firstNonRepeatedCharacter(String str)
{
ArrayList<Character> check = new ArrayList<Character>();
for (char c : str.toCharArray()) {
check.add(c);
}
for (int i = 0; i < check.size(); i++) {
char temp = check.get(i);
check.remove(check.get(i));
if (check.contains(temp)) {
check.removeAll(Collections.singleton(temp));
} else {
return temp;
}
}
return null;
}
答案 0 :(得分:0)
您的问题是,一旦您从ArrayList中删除了某些项目,例如
check.remove(check.get(i));
ArrayList中的所有项目都被“上移”:如果删除索引5处的项目,以前位于索引6处的项目现在位于索引5处。 )索引6,则删除了(原始)索引7的索引。
答案 1 :(得分:0)
^^丹在上面说了什么。您将遇到的另一个错误是,如果您一直没有不重复的字符。
每次删除重复字符时,check.size()
都会保持更新。如果您不能足够快地找到不重复的字符,则索引i将超过check.size()的索引,即使字符串中可能剩下不重复的字符,也退出for循环! 为了解决这个问题,我只需使用while循环即可。