hdu1238

找最长的公共字串,暴搜呀,

先将字符串按长度从短到长排序,枚举最短的字符串的子串,判断是否都是别的字符串的子串,求出最大长度
什么反串之类的,其实在枚举最短字串的时候,多定义一个字符串再一起赋值就OK了,看代码吧
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char s[105][105];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,m=100000,l;
		scanf("%d",&n);getchar();
		for(int i=0;i<n;i++)
		{
			scanf("%s",s[i]);
			if(strlen(s[i])<m)
		    {
			  m=strlen(s[i]);
			  l=i;
			}
		}
		char os[105],ps[105],ans=0;
		for(int i=0;i<strlen(s[l]);i++)
		{
			for(int j=i;j<strlen(s[l]);j++)//变量i和j 用来枚举字串的首和尾
			{
				int b=0;
				for(int k=i;k<=j;k++)//枚举最短字串的长度,正串和反串
				{
					os[b++]=s[l][k];
					ps[j-k]=s[l][k];
				}
				os[b]='\0';ps[j-i+1]='\0';
				int flag=1;
				for(int k=0;k<n;k++)
				{
					if(!strstr(s[k],os)&&!strstr(s[k],ps))//正串和反串都没有在字符串在出现
						{
							flag=0;break;
					}
				}

                   if(flag&&ans<strlen(ps))
						ans=strlen(ps);
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

原文地址:https://www.cnblogs.com/nanke/p/2122364.html