java中lastIndexOf的时间复杂度是多少?

时间:2017-01-25 15:43:03

标签: java

lastIndexOfString一起使用时,int t= s.lastIndexOf(c);的时间复杂度是多少? 假设:s 其中Stringcs.charAt(0)auth/login.blade.php auth/register.blade.php auth/passwords/email.blade.php auth/passwords/reset.blade.php layouts/app.blade.php home.blade.php

3 个答案:

答案 0 :(得分:0)

一旦String被实现为char数组,它就是O(n)。

public int lastIndexOf(int ch, int fromIndex) {
    if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
        // handle most cases here (ch is a BMP code point or a
        // negative value (invalid code point))
        final char[] value = this.value;
        int i = Math.min(fromIndex, value.length - 1);
        for (; i >= 0; i--) {
            if (value[i] == ch) {
                return i;
            }
        }
        return -1;
    } else {
        return lastIndexOfSupplementary(ch, fromIndex);
    }
}

答案 1 :(得分:0)

对于String.lastIndexOf(int),它是线性的 - O(n)

你至少需要迭代整个字符序列,然后结束开始。

这就是Java的作用。

最坏情况:"abbbbbbbbbb".lastIndexOf('a')

String.lastIndexOf(String) O(n*m) ,其中n为输入长度,m为参数长度。

在这种情况下,Java迭代结束开始,只要找到匹配针的最后一个字符,它就会尝试匹配两边的前面字符。

答案 2 :(得分:0)

看看这个方法的实现。在两个代码分支中,它包含对字符串内部数组的简单迭代:

 int i = Math.min(fromIndex, value.length - 1);
 for (; i >= 0; i--) {
      if (value[i] == ch) {
             return i;
      }
 }

因此,复杂性只是O(n),即线性。