繁体   English   中英

时间/空间复杂度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM