请问next引用有歧义是什么意思呀..
查看原帖
请问next引用有歧义是什么意思呀..
324176
yuyuyuyu12345楼主2022/8/16 18:21
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e5+6;
int next[N];
void init(int len,string ch)
{
	int j=-1;
	int i=0;
	next[0]=-1;
	while(i<len)
	{
		if(j==-1||ch[i]==ch[j]){//相同情况两个一起换位置 
			i++;j++;
			next[i]=j;
		}
		else j=next[j];//回退到之前匹配的地方  和现在位置做比较 
	}
}
int kmp(int n,int m,string nn,string mm)
{
	int i=0,j=0;
	while(i<n)
	{
		if(nn[i]==mm[i]||j==-1)
		{
			i++;j++;
		}
		else j=next[j];
		if(j==m) return i-m+1;
	}
}
int main()
{
	string s,s1,s2,s3;
	int n;
	cin>>n>>s;
	int x;
	for(int i=1;i<=4;i++)
	{
		cin>>x;
		if(x==1) cin>>s1,s=s+s1,cout<<s<<endl;
		if(x==2) 
		{
			int a,b;
			cin>>a>>b;
			int k=0;
			for(int j=a;j<=a+b;j++)
			{
				s2+=s[j];
			}
			s=s2;
			cout<<s<<endl;
		}
		if(x==3)
		{
			int a,k=0;
			cin>>a>>s3;
			string s4;
			for(int i=0;i<a;i++)
			{
				s4+=s[i];
			}
			s=s4;
			cout<<s+s3<<endl;
		}
		if(x==4)
		{
			string s5;
			cin>>s5;
			int len1=s.size();
			int len=s5.size();
			init(len,s5);
			cout<<kmp(len1,len,s,s5);
		}
	 } 
}
2022/8/16 18:21
加载中...