每日两道算法题 - 实现strStr函数(高频)

问题

给定两个字符串source和target,需在source中找出target出现的第一个位置,不存在则返回-1。
输入:source="hello" target="ll"
输出:2

思路

可以直接利用indexOf但是没有意义。 通过遍历,不断在source中截取字符串与target进行比较。

实现

class Solution {
    public int strStr(String source, String target) {
        int length = target.length();
        for(int index=0;index<source.length()-1;++index){
            if(source.substring(index,index+length).equals(target)){
                return index;
            }
        }
        return -1;
    }
}

但是这么实现运行会报错,会出现角标越界,问题点就在substring上,尾值会出现越界。
所以需要控制循环次数,因为截取时是用index+target长度。所以对于遍历次数应该改为source长度-target长度+1。从而避免越界出现

class Solution {
    public int strStr(String source, String target) {
        int length = target.length();
        for(int index=0;index<source.length()-length+1;++index){
            if(source.substring(index,index+length).equals(target)){
                return index;
            }
        }
        return -1;
    }
}
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容