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

例题:

分析:

题目的意思就是:

先给出一个字符串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"));
    }
}

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 12:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 12:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 12:46:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 12:46:03       20 阅读

热门阅读

  1. 一、SpringBoot框架搭建

    2024-01-11 12:46:03       34 阅读
  2. C/C++-传值/地址的区别

    2024-01-11 12:46:03       28 阅读
  3. 在IntelliJ IDEA中,.idea文件是什么,可以删除吗

    2024-01-11 12:46:03       36 阅读
  4. Crow:路由局部插件2 调用before_handle

    2024-01-11 12:46:03       40 阅读
  5. C++入门级程序day1

    2024-01-11 12:46:03       37 阅读
  6. Python Selenium常见的报错以及措施

    2024-01-11 12:46:03       35 阅读
  7. Halcon 3D相关算子(二)

    2024-01-11 12:46:03       31 阅读