Java中的String方法是否在O(1)时间内运行?

时间:2017-12-14 08:25:49

标签: java string algorithm big-o

这是我的代码,用于查找最长子字符串的长度而不重复字符。这段代码是否在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;

}

2 个答案:

答案 0 :(得分:6)

sub.indexOf()可能需要线性时间,因为它可能需要检查sub的所有字符。在最坏的情况下,sub的长度为 O(n)(假设您的输入没有重复字符)。

因此,您的总运行时间为 O(n 2 ,因为循环具有n次迭代,并且在每次迭代中都调用indexOf()

答案 1 :(得分:1)

您的代码在O(n^2)中运行,因为有一个for循环,在其中您调用indexOf()方法。这又是O(n)

因此,您的方法为O(n^2)