Java 时间/空间复杂性

Java 时间/空间复杂性,java,time-complexity,big-o,complexity-theory,space-complexity,Java,Time Complexity,Big O,Complexity Theory,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 + le

准备考试。我认为时间复杂度是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);
}
公共静态字符串lastSubstring(字符串s){
int start=0;
int end=start+1;
int len=0;
而(末端+长度s.charAt(结束+长度)){
结束+=长度+1;
len=0;
}否则{
开始=结束;
结束=开始+1;
len=0;
}
}
返回s.substring(开始);
}
时间复杂度是O(n),空间复杂度是O(1),其中n是输入字符串的长度

空间复杂度为O(1),因为除了“start”、“end”、“len”等变量外,没有使用额外的空间。我在这里假设您没有考虑返回字符串占用的空间,如果考虑到这一点,那么空间复杂性将变为O(n),因为最坏情况下,长度为n的完整字符串将返回

时间复杂度为O(n),因为外部变量“end”仅从0增加到n。当“结束”大于输入长度n时,while循环中断

时间复杂度应该是O(n^2),如果对于从0到n的每个“end”迭代,您迭代另一个内部变量,比如从0到n的“len”。 但在您的情况下,迭代次数是“end”+“len”的函数,即使您必须从0重新开始“len”,迭代次数也只会增加到n+n=2n。这就是为什么这里的时间复杂度是O(n)。

如果不计算返回值,则空间仅为O(1)。由于创建返回值是方法的一部分,因此方法的空间复杂度实际上是O(n),其中
n
是输入字符串的长度。