学习内容:kmp算法
follow:
代码随想录讲解kmp算法
图解+讲解kmp算法
28 实现strStr
题目描述:
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
解析:
这道就是实现kmp算法
解答:
class Solution {
public static int strStr(String haystack, String needle) {
if(needle.length() == 0) return 0;
//kmp算法
//首先构造前缀表:每个数组下标表示,包含本字符的最长公共前后缀的长度
int[] next = getNext(needle);
//利用前缀表进行匹配
int j = 0;
for(int i = 0; i < haystack.length(); i++){
while(j > 0 && haystack.charAt(i) != needle.charAt(j)){
j = next[j - 1];
}
if(haystack.charAt(i) == needle.charAt(j)){
j++;
}
if(j == needle.length()){
return i - needle.length() + 1;
}
}
return -1;
}
public static int[] getNext(String s){
int[