将lastIndexOf
与String
一起使用时,int t= s.lastIndexOf(c);
的时间复杂度是多少?
假设:s
其中String
为c
,s.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
答案 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)
,即线性。