比较简单的一题,思路就是开始先找到所有字符串中长度最短的那一个, 然后枚举出其所有子串, 并在枚举过程中判断子串是否符合条件……选取符合条件的最长的子串的长度输出
很多人说poj上数据弱, 但这个程序在poj上148ms, hdoj上0ms,不知为是么?
#include<stdio.h> #include<string.h> int main() { int t, n, i, j, k, min, len, pos, num; char str[101][101], a[101], b[101]; scanf("%d", &t); while(t--) { scanf("%d", &n); for(i=0, min=999; i<n; i++) { scanf("%s", str[i]); len=strlen(str[i]); if( min>len )//取得最短字符串的位置和长度 { min=len; pos=i; } } num=0; for(i=1; i<=min; i++)//得到最短字符串的子串, 比较 { for(j=0; j+i-1<min; j++) { for(k=0; k<i; k++) { a[k]=str[pos][j+k];//得到顺序子串 b[k]=str[pos][j+i-k-1];//得到子串反序 } b[k]=a[k]='\0'; for(k=0; k<n; k++) { if(strstr(str[k], a)==NULL && strstr(str[k], b)==NULL) break; } if( k>=n ) num=i; } } printf("%d\n", num); } }