java查找字符串中与大O相关的第一个非重复字符
我解决了一个关于找到第一个非重复字符的任务。例如,如果输入“apple”,答案将是“a”,即第一个不重复的字符。即使“e”不重复,它也不是第一个字符。另一个例子:“lalas”的答案是“s”
public static char firstNonRepeatingCharacter(String input) {
boolean unique;
int count = input.length();
char[] chars = input.toCharArray();
for (int i = 0; i < input.length(); i++) {
unique = true;
for (int j = 0; j < input.length(); j++) {
count--;
char c = chars[i];
if (i != j && c == chars[j]) {
unique = false;
break;
}
}
if (unique) {
return input.charAt(i);
}
}
return (0);
}
由于嵌套循环具有O(n2)复杂性,我希望简化此代码。我一直在看代码,试图找出我是否可以使它更快,但没有想到什么
# 1 楼答案
另一种方法是查找字符的第一个和最后一个
indexOf
。如果两者相同,那么它是唯一的编辑:
或使用Java 8+
# 2 楼答案
O(n)更好
使用中间层结构来处理重复次数
# 3 楼答案
# 4 楼答案
看看这个解决方案。与上面的@Lucbel类似。基本上,使用LinkedList。我们存储所有非重复数据。但是,我们将使用更多的空间。但运行时间为O(n)