题目链接
思路一:
首先,最直接的思路是分别用两个数组取存储输入的数。
因为题目要求是不需要区分大小写的,所以最好先将这些字母的大小写统一一下。
最关键的是其中的for循环的理解,if(b[i]==’ ‘)这句话是先让i走到b数组的一个完整单词的后面,
限定j一次循环的位置。
k=0,k要每次都等于0,因为每一个新的循环,对于j来说是从n开始,对于k来说总是从数组k的第一个位置开始。
n就是配合着j,确定每一次循环,j开始的位置,都是从n开始。
注意:下面代码总是有三个测试点不通过,用O2优化就能通过…看了半天也没看出来哪里没思考到位。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include<stdio.h> #include<string.h> int main(){ char a[11],b[1000001]; gets(a); gets(b); strcat(a," "); strcat(b," "); for(int i=0;a[i]!='\0';i++){ if(a[i]>='a'){ a[i]-='a'-'A'; } } for(int i=0;b[i]!='\0';i++){ if(b[i]>='a'){ b[i]-='a'-'A'; } }
int s; int i; int n=0; int j,k; int rec; int geshu=0;
for(i=0;b[i]!='\0';i++){ if(b[i]==' '){ s=1; for(j=n,k=0;j<=i,a[k]!='\0';j++,k++){ if(a[k]==b[j]){ s*=1; }else{ s*=0; } } if(s==1){ geshu++; } if(s==1&&geshu==1){ rec=n; } n=i; n++; } } if(geshu==0){ geshu=-1; printf("%d",geshu); }else if(geshu>=1){ printf("%d %d",geshu,rec); } return 0; }
|