今天刷了两道题,实现了一下KMP算法,越来越感觉这算法秒啊
题目要求:
代码:
class Solution {
public:
int strStr(string haystack, string needle) {
int hs = haystack.size(),ns = needle.size();
//首先排除needle长度为0的情况
if(ns == 0)
return 0;
//开始实现needle的next[]数组
int m = 0,n = -1;
vector<int> next(ns);
next[m] = n;
while(m < ns-1){
if(n == -1 || needle[m] == needle[n]){
m++;
n++;
next[m] = n;
}else
n = next[n];
}
//正经的KMP来喽!
int i = 0,j = 0;
while(i < hs && j < ns){
if(j == - 1 || haystack[i] == needle[j]){
i++;
j++;
}else{
j = next[j];
}
}
if(needle[j] == '\0'){
return i-j;
}
return -1;
}
};