⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmp.txt.txt

📁 在一个字符串找出是否另外一个字符串在该字符串中
💻 TXT
字号:
#include<iostream>
#include<string>
using namespace std;
int fail(int n,string Pat)//找下一个匹配位置
{
	int lenP=Pat.length ();
	int f[10000]={0};
	f[0]=-1;
	for(int j=1;j<lenP;j++)
	{
		int i=f[j-1];
		while((Pat[j]!=Pat[i+1])&&i>=0)i=f[i];
		if(Pat[j]==Pat[i+1])f[j]=i+1;
		else
			f[j]=-1;
	};
	return f[n];
}
int KMP(string Pat,string Tar)
{
	int PosP=0;
	int PosT=0;
	int lengthP=Pat.length ();
	int lengthT=Tar.length ();
	while(PosT<lengthP&&PosT<lengthT)
	{
		if(Pat[PosP]==Tar[PosT])//逐个比较
		{
			PosT++;
			PosP++;
		}
		else if(PosP==0)
			PosT++;
		else
			PosP=fail(PosP-1,Pat)+1;
	};
		if(PosP<lengthP)return -1;
		else
			return PosT-lengthP+1;

};
int main()
{
	string pat;
	string tar;
	cout<<"Enter pat"<<endl;
	cin>>pat;
	cout<<"Enter tar"<<endl;
	cin>>tar;
	int ans=KMP(pat,tar);
	if(ans==-1)
		cout<<"匹配失败"<<endl;
	else
		cout<<"在第"<<ans<<"位匹配成功"<<endl;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -