#include <iostream>
#include <cstring>
#include <cstdio>
#define inf 0x3f3f3f3f
#define sd(a) scanf("%d",&a)
#define mem(a) memset(a,0,sizeof(a))
typedef long long ll;
const int mod = 1e9+7;
const int maxn = 3e5+10;
using namespace std;
string str1[maxn];
string str2;
int next1[maxn];
int kmp(string str1,string str2);
void GetNext(string str);
int kmp(string str1,string str2){
if((int)str2.length() <= 0||(int)str1.length() < (int)str2.length())
return -1;
int i1 = 0;
int i2 = 0;
GetNext(str2);
while(i1 < (int)str1.length() &&i2 < (int)str2.length())
{
if(str1[i1] == str2[i2])
{
i1++;
i2++;
}else if(i2 == 0){
i1++;
}else{
i2 = next1[i2];
}
}
return i2 == (int)str2.length()?i1-i2:-1;
}
void GetNext(string str){
memset(next1,0,sizeof(next1));
next1[0] = -1;
if((int)str.length() == 1)return;
int i = 2;
int cur = 0;//与i位置比较的位置
while(i < (int)str.length())
{
if(str[i-1] == str[cur])
next1[i++] = ++cur;
else if(cur > 0)
cur = next1[cur];
else
next1[i++] = 0;
}
}
int main()
{
return 0;
}
KMP模板(字符串匹配)
猜你喜欢
转载自blog.csdn.net/qq_42937838/article/details/104397755
今日推荐
周排行