class Solution {
public:
int strStr(string haystack, string needle) {
if(haystack.size() == needle.size() && haystack == needle)
return 0;
if(haystack.size() < needle.size()|| haystack.size()<1)
return -1;
if(needle.size()<1)
return 0;
int i1=0, i2=0;
vector<int> v1(needle.size(),0);
getNext(v1, needle);
while(i1<haystack.size() && i2<needle.size())
{
if(haystack[i1] == needle[i2])
{
i1++;i2++;
}
else if(v1[i2]==-1)
i1++;
else
i2 = v1[i2];
}
return i2==needle.size()? i1-i2 : -1;
}
void getNext(vector<int>& v1, string & s1)
{
if(s1.size() == 1)
{
v1.push_back(-1);
return;
}
v1[0] = -1;
v1[1] = 0;
int i = 2;
int cn =0;
while(i < v1.size())
{
if(s1[i-1] == s1[cn])
v1[i++] = ++cn;
else if(cn > 0)
cn = v1[cn];
else
v1[i++] = 0;
}
return;
}
};
kMp算法(有大坑)
最新推荐文章于 2021-07-26 09:48:33 发布