zoukankan      html  css  js  c++  java
  • 南阳OJ----Binary String Matching

    Binary String Matching

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is ‘11’, you should output 3, because the pattern A appeared at the posit
     
    输入
    The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And it is guaranteed that B is always longer than A.
    输出
    For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
    样例输入
    3
    11
    1001110110
    101
    110010010010001
    1010
    110100010101011 
    样例输出
    3
    0
    3 
    来源
    网络
    上传者
    naonao
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct node
    {
      char a;
      struct node *next;
    }Node;
    int i;
    bool flag=true;
    int main( void )
    {
        Node *head,*p1,*p2;
        int t,n,count;
        scanf("%d",&t);
        getchar();
        while(t--)
        {
            head=NULL;
            count=n=0;
            p1=p2=( Node * )malloc( sizeof(Node) );
            char str[10]={''};
            gets(str);
            //getchar();
            while(p1->a=getchar(),p1->a!='
    ')
            {
                if(n++==0)
                          head=p1;
                else 
                     p2->next=p1;
                     p2=p1;
                p1=(Node*)malloc(sizeof(Node));
            }
            p2->next=NULL;
              p1=head;
        /*      while(p1!=NULL)
              {
                  putchar(p1->a);
                  p1=p1->next;
              }
              puts("");
        */
             while(p1!=NULL)
             {
             
                  while(p1!=NULL&&p1->a!=*str)   //找到第一个位置
                     {
                       p1=p1->next;
                     }
                  if(p1!=NULL)                //防止万一没有找到
                  {
                      p2=p1->next;
    
                    for( ::i=0; str[i]!=''; i++ )
                    {
                      if(str[i]==p1->a)
                      {
                          p1=p1->next;
                      }
                      else 
                      {
                          ::flag=false;
                               p1=p2;
                                 break;
                      }
                      
                      if((p1==NULL&&str[i+1]!=''))
                          {
                             ::flag=false ;
                              break;
                          }
                    }
                        
                     if(::flag)
                     {
                              p1=p2 ;
                              count++;
                     }
                    else 
                        ::flag=true;
                  }
                }
    
             free(head);
             printf("%d
    ",count);
            
             }
        return 0;
    }
  • 相关阅读:
    读《ASP.NET Core3框架揭秘》之3&4~依赖注入
    读《ASP.NET Core3框架揭秘》之2~跨平台的奥秘
    读《ASP.NET Core3框架揭秘》之1~全新的开发体验
    C# 获取当前方法/父方法的信息
    Redis——集群(cluster)
    Redis——哨兵(sentinel)
    Redis——主从复制
    Redis——版本升级&数据迁移
    Redis——6.0集群安装部署
    Redis——常用命令
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3193493.html
Copyright © 2011-2022 走看看