这个用substring获得字串,在用equals比较
class Solution {
public int strStr(String haystack, String needle) {
int i=0,j;
if(needle.length()==0){
return 0;
}
int t = haystack.length()-needle.length();
while(i <= t){
if(needle.equals(haystack.substring(i,i+needle.length())))
return i;
i++;
}
return -1;
}
}
Runtime: 2 ms
Memory Usage: 37.6 MB
这个是直接用charAt一个一个获取字符来一个个比较
class Solution {
public int strStr(String haystack, String needle) {
int i=0,j;
if(needle.length()==0){
return 0;
}
int t = haystack.length()-needle.length();
while(i <= t){
for(j=0;j<=needle.length();j++){
if(j==needle.length())
return i;
if(haystack.charAt(i+j)!=needle.charAt(j)){
i++;
break;
}
}
}
return -1;
}
}
Runtime: 4 ms
Memory Usage: 38.8 MB
查看源码发现equals方法也是要遍历每个字串字符的,复杂度应该是和用charAt的一样的,是因为charAt源码在每次取字符时还判断了一下索引是否超出合理范围才使运行时间差出那么多吗,希望大佬能够解答