【发布时间】:2018-05-28 06:39:23
【问题描述】:
这是我在不重复字符的情况下查找最长子字符串长度的代码。此代码是否在 O(n) 时间内运行?或者它是否在 O(n^2) 时间内运行?我不确定 String 方法是在 O(n) 时间还是 O(1) 时间内运行。
一个测试用例包括:“pwwkewo”返回 4,因为“kewo”是字符串中具有唯一字符的最长子字符串。
public int lengthOfLongestSubstring(String s) {
int maxLength = 0;
String sub = "";
for(int i=0; i<s.length(); i++) {
//add that char to the sub string
sub = sub + s.charAt(i);
//if we find a char in our string
if(sub.indexOf(s.charAt(i)) != -1) {
//drop any replicated indexes before it
sub = sub.substring(sub.indexOf(s.charAt(i)) + 1);
}
if(sub.length() > maxLength) {
maxLength = sub.length();
}
}
return maxLength;
}
【问题讨论】:
-
我猜它的 O(n) 因为你拥有的字符越多,花费的时间就越长
-
不会是 O(N^2) 因为
sub.indexOf()是 O(N) 吗?顺便说一句,sub = sub + s.charAt(i);导致了一个非常低效的循环,因为有很多多余的内存分配 - 请查看StringBuilder。 -
取决于您的 Java 版本。检查stackoverflow.com/questions/4679746/…
标签: java string algorithm big-o