leetcode——implement strstr()问题两种解决方法的运行速度为何差距这么大

这个用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源码在每次取字符时还判断了一下索引是否超出合理范围才使运行时间差出那么多吗,希望大佬能够解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值