[英]Time/Space Complexity
为考试而学习。 我认为时间复杂度是 O(n^2),空间是 O(1)。 请帮忙,我说得对吗?
public static String lastSubstring(String s) {
int start=0;
int end = start+1;
int len =0;
while (end + len < s.length()) {
if (s.charAt(start + len) == s.charAt(end + len)) {
len++;
} else if (s.charAt(start + len) > s.charAt(end + len)) {
end += len + 1;
len = 0;
} else {
start = end;
end = start + 1;
len = 0;
}
}
return s.substring(start);
}
时间复杂度为 O(n),空间复杂度为 O(1),其中 n 是输入字符串的长度。
空间复杂度为 O(1),因为除了“start”、“end”、“len”等变量外,没有使用额外的空间。 我在这里假设您没有考虑返回字符串占用的空间,如果考虑到这一点,那么空间复杂度将变为 O(n),因为最坏的情况是将返回长度为 n 的完整字符串。
时间复杂度为 O(n),因为外部变量“end”仅从 0 增加到 n。 当“end”大于输入长度 n 时,while 循环中断。
时间复杂度应该是 O(n^2),如果对于从 0 到 n 的每个“结束”迭代,您迭代另一个内部变量,比如说从 0 到 n 的“len”。 但是在您的情况下,迭代次数是 'end' + 'len' 的函数,即使您必须从 0 重新开始 'len',迭代次数也只会上升到 n+n = 2n。 这就是为什么这里的时间复杂度是 O(n)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.