PAT A1077 Kuchiguse 对着书打的,必须再做一遍 reverse在algorithm

来源:互联网 发布:知上传媒 编辑:程序博客网 时间:2024/05/16 06:21
//是对着书打的,边打边理解的,这题有必要再做一遍 //ac了 //reverse函数在algorithm.h//如果用gets和getchar都记得用getchar吸收空格,之前一题诗getchar也要用getchar吸收空格 #include<stdio.h>#include<string.h>int n,minlen=256,ans=0;char s[100][260];//至多100个字符串,每个字符串至多256个字符int main(){scanf("%d",&n);getchar();//换行符要吸收掉!不然第一个字符会被吞掉吧for(int i=0;i<n;i++){gets(s[i]);//不然这里就是一个空格吧! int len=strlen(s[i]);if(len<minlen) minlen=len;//取最小长度,这个最后会变成最小的,在后面求公共子串时可以用这个最小的来做遍历的最大值 for(int j=0;j<len/2;j++){//反转字符串s[i],转化为求公共前缀char temp=s[i][j];s[i][j]=s[i][len-j-1];//交换str[i]与str[len-i-j]s[i][len-j-1]=temp; }//完成了一个字符串的反转  }for(int i=0;i<minlen;i++){//判断所有字符串的第i个字符是否全部相等 //对于第一个字符串的每一个字符,与下面的1~n-1个字符串的该位置字符对比 char c=s[0][i];//取第一个字符串的i号字符bool same=true;//记得是在这里设置true for(int j=1;j<n;j++){//从标号1~n-1看每一个的i号元素是不是相等 //判断其余字符串的第i个字符是否等于cif(c!=s[j][i]){//只要有一个不等,说明公共前缀到此为止,break退出循环 same=false;break; } }//注意考虑same为true的情况,最好把ans计数一下 if(same) ans++;//这样下面看有没有就清晰一点,也可以很好的包括进0的情况 else break;//如果samw为false,说明匹配结束,退出循环 }if(ans){//倒序输出公共字符串for(int i=ans-1;i>=0;i--){printf("%c",s[0][i]); }}else{printf("nai\n");//不存在公共前缀 } return 0;}

0 0
原创粉丝点击