Tips:
- 此题采用的是边输入边比较的方法,拿第一次输入的字符串依次和后面输入的字符串进行比较,left下标非递减.
- 因为读入的字符串可能带有空格,于是乎gets(common)连续执行了两次才去除了回车的麻烦.具体原因还没深究,标记下以后再来更新.
- 中间循环体加入了left<=rigth,这样如果前面有完全不匹配的字符串时,left就会赋值大于right,从而不再执行循环的内容.
- 相同代码用Java实现过,有一个点超时.所以在写题的时候,尽量用C/C++吧.
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
int n,i,j,k,left,right;
char common[256],c[256];
while(scanf("%d",&n) != EOF) {
gets(common);
gets(common);
left = 0;
right = strlen(common) - 1;
for(i = 1;i < n;i++){
gets(c);
for(j = right,k = strlen(c) - 1;j >= left && k >= 0 && left <= right;j--,k--){
if(common[j] != c[k]){
break;
}
}
left = ++j;
}
if(left > right)
printf("nai\n");
else{
for(i = left;i <= right;i++)
printf("%c",common[i]);
printf("\n");
}
}
return 0;
}