找出字符串中第一个匹配项的下标(Leetcode28)

发布时间:2024年01月10日
例题:

分析:

题目的意思就是:

先给出一个字符串pattern,要拿着pattern字符串和原始字符串(origin)比对,若在origin中找到了pattern字符串,则返回pattern字符串在原始字符串origin中的下标。

????????????????????????

先拿着pattern和origin从第一个字符开始依次比对。

单个字符比对若一致, 继续往下比对其它字符。

直到找出第一个比对不成功情况,此时可以把 i 向右移动一位(i++), j 回到0索引,origin字符串从 i = 1索引开始重新和pattern比对,如下图:

重复上述步骤,在原始字符串(origin)中找到和pattern相同的部分,返回当前索引 i :

思路:

可以使用两个循环来依次比对,外层循环表示从原始字符串索引 i 开始和pattern进行比对,

注意:外层循环不必循环origin.length 次,循环origin.length - pattern.length 次即可。

代码实现:
package leetcode;

public class StrStrLeetcode28 {
    public static int strStr(String haystack, String needle) {
        char[] pattern = needle.toCharArray();
        char[] origin = haystack.toCharArray();
        int i = 0;  //原始数组的索引
        int j = 0;  //模式数组的索引
        while(i <= origin.length - pattern.length){
            for (j = 0; j < pattern.length; j++) {
                if(origin[i + j] != pattern[j]){
                    break;
                }
            }
            if(j == pattern.length){  //表示pattern字符串中的所有字符都成功匹配了origin
                return i;
            }
            i++;
        }
        return -1;
    }
    public static void main(String[] args) {
        System.out.println(strStr("aaacaaab", "aaab"));
    }
}

文章来源:https://blog.csdn.net/qq_63748940/article/details/135512888
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。