微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

时间/空间复杂度

如何解决时间/空间复杂度

学习考试。我认为时间复杂度为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)的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。