南阳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]={'\0'}; gets(str); //getchar(); while(p1->a=getchar(),p1->a!='\n') { 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]!='\0'; i++ ) { if(str[i]==p1->a) { p1=p1->next; } else { ::flag=false; p1=p2; break; } if((p1==NULL&&str[i+1]!='\0')) { ::flag=false ; break; } } if(::flag) { p1=p2 ; count++; } else ::flag=true; } } free(head); printf("%d\n",count); } return 0; }
编程是一种快乐,享受代码带给我的乐趣!!!