leetcode28. 实现 strStr()-java实现

题目所属分类

典型的KMP算法

原题链接

实现 strStr() 函数。

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。

代码案例:输入:haystack = “hello”, needle = “ll”
输出:2

题解

就是KMP模板题算
详情请点击 这里 !!!!!!!!!
就是求next 数组
然后下来是匹配问题

class Solution {
    public int strStr(String s1, String p1) {
        if(p1.isEmpty()) return 0 ;
      char[] p = (" " + p1 ).toCharArray();
      char[] s = (" " + s1).toCharArray();
        
        int n = s1.length()  , m = p1.length()  ;
        int[] ne = new int[m+1];
        for(int i = 2,j=0 ; i <= m ;i++){
            while(j != 0 && p[i]!= p[j+1]) j = ne[j];
            if(p[i] == p[j+1]) j++;
            ne[i]= j;
        }
        for(int i = 1,j=0; i<= n ;i++){
            while(j != 0 && s[i] != p[j+1]) j = ne[j];
            if(s[i] == p[j+1])j++;
            if(j == m){
                return i- j ;
            }
             
        }
        return -1 ;
    }
}
posted @ 2022-10-11 20:07  依嘫  阅读(21)  评论(0)    收藏  举报