hdu1238 字符串應用


題目地址:    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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章