KMP挖坑

P串是不动的,S会移动,起始位置为0,i比j大几次,就移动几次,从而S就从0移动几次作为初始
//KMP暴力做法


int solve(char P[],int n,char S[],int m)  //P为模式串,S为主串 
{
	int count=0,count1=0,i,j;
	for(i=0;i+n<=m;i++)   //循环终止条件是“你可以挨着个查,但你不能超范围” 
	{
		count1=0;
		for(j=0;j<n;j++)
		{
			if(P[j]==S[i+j])
			{
				count1++;
			}
		}
		if(count1==n)
		count++;
	}
	return count;
 } 

//暴力做法的优化做法


 int solve(char P[],int n,char S[],int m)
 {
 	int i,j,count=0;
 	for(i=0;i+n<=m;i++)    //理解成为个数,即p加上i的个数不能超过m个 
 	{                      //而i是角标含义,从而借助数量推出角标i的范围 
 		for(j=0;j<n;j++)
 		if(P[j]!=S[i+j])       //这里也验证了角标极限范围:i+n-1<=n-1 
	     break;
	     if(j==n)
	     count++;
	 }
	 return count;
  } 

相关文章:

  • 2022-01-11
  • 2021-10-21
  • 2021-06-17
  • 2022-03-08
  • 2021-11-30
  • 2022-12-23
  • 2021-09-27
  • 2021-10-01
猜你喜欢
  • 2021-10-21
  • 2021-11-23
  • 2021-07-29
  • 2021-09-13
  • 2021-07-18
  • 2022-02-10
相关资源
相似解决方案