hdu 1686 kmp(求子串出现个数)

点击打开链接

#include 
#include 
#include 
using namespace std;
const int M =1010000;
char a[M],b[10100];
int Next[M],n,m,lb,la;
void Get()
{
	Next[0]=-1;
	int i=0,k=-1;
	while(i : "b1..bk'-1" == "bk-(k'-1)...bk-1"
		//   next[i]=k          "bk-(k'-1)...bk-1"  == "  bi-k'-1 .. bi-1"
		//"b1..bk'-1"  == "  bi-k'-1 .. bi-1"  	 直到 bk'==bi  即next[i+1]=k'+1 
		else
		{
			k=Next[k];
		}
		
	}
}
void Kmp()
{
	int ans=0;
	int i=0,k=0;
	while(i TLE 太慢 
				// 如果不回溯主串 应该用模式串第几位于i比较? 因为k=lb b[k]!=a[i] 所以回溯到k=next[k] 
				k=Next[k];//
			}
		}
		else
		{
			k=Next[k];
		}
	}
	cout<>t;
	while(t--)
	{
		scanf("%s%s",b,a);
		la=strlen(a);
		lb=strlen(b);
		Get();
		Kmp();
		
	
	}
	return 0;
} 


你可能感兴趣的:(Data,Structure)