hdu1238 字符串应用

来源:互联网 发布:淘宝怎样设置经营范围 编辑:程序博客网 时间:2024/05/29 11:38


题目地址:    http://acm.hdu.edu.cn/showproblem.php?pid=1238

首先将给定的字符串按照长度进行排列;

        枚举最短的字符串;

        对枚举的每个字符串在其它字符串中进行查找,查看是否是其它字符串的子串;

        统计符合条件的字符串的长度,选取最大的长度.

PS:不仅要比较子串,还要比较子串的反串.

#include <stdio.h>#include <string.h>#include <stdlib.h>char str[101][101],tmp[101],rtmp[101];int n,t;int cmp(const void *a,const void *b){return strlen((char*)a) - strlen((char*)b);}//枚举字符串void copy(char *st,int left,int right){int i = 0,h,k;while(left<=right){tmp[i] = st[left];i++,left++;}tmp[i]='\0';k = 0;for(h=i-1;h>=0;h--){rtmp[k]=tmp[h];k++;}rtmp[k]='\0';}int main(){int i,k,h;int max,flag;while(~scanf("%d",&n)){while(n--){scanf("%d\n",&t);for(i=0;i<t;i++)scanf("%s",str[i]);qsort(str,t,sizeof(str[0]),cmp);max=0;for(i=0;i<(int)strlen(str[0]);i++){for(k=i;k<(int)strlen(str[0]);k++){copy(str[0],i,k);flag = 1;for(h=1;h<t;h++){if(strstr(str[h],tmp) == NULL&&NULL == strstr(str[h],rtmp)){flag=0;break;}}if(flag)max=max>(int)strlen(tmp)?max:(int)strlen(tmp);}}printf("%d\n",max);}}return 0;}