题目所属分类
典型的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 ;
}
}