NYOJ 5 Binary String Matching

#include<stdio.h>
#include<string.h>
int main()
{
  int num,count;
  scanf("%d\n",&num);
  //getchar();
  while(num--)
  {
    count=0;
    int i=0,j=0,len;
    char a[200],b[1200];
    scanf("%s\n%s",a,b);
    len=strlen(b);
    while(i<=len)
    {
      if(a[j]=='\0')
      {
        count++;//出现一次加一次
        i=i-j+1; i回溯
        j=0;
      }
      else if(a[j]==b[i])
      {
        i++;
        j++;
      }
      else
      {
        i=i-j+1; i回溯
        j=0;
      }
      //printf("%d\n",count);
    }
    printf("%d\n",count);
  }
}

//KP算法  刚开始看这题时,没有理解正确,以为只是简单地kp问题,其实题目让求的是,a串在b串出现的次数 

/*

以下是最优代码,,

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
  string s1,s2;
  int n;
  cin>>n;
  while(n--)
  {
    cin>>s1>>s2;
    unsigned int m=s2.find(s1,0);
    int num=0;
    while(m!=string::npos)
    {
      num++;
      m=s2.find(s1,m+1);
    }
    cout<<num<<endl;
  }
}*/

你可能感兴趣的:(String)