poj 3450 Corporate Identity (KMP+最长公共子串)

题目链接:   poj 3450

题目大意:   给定n个字符串,找出最长的公共子串,若长度小于3输出IDENTITY LOST

解题思路:   选出长度最短的字符串,枚举它的子串

                  把它的子串分别与其余的n-1个字符串匹配

                  字符串长度越短它的子串就越少,枚举量越少

                  枚举子串的顺序从到小,能够匹配就退出输出答案

                  如果从小到大枚举则需要枚举所有符合情况的子串,耗费时间

代码:

//Final   找最长的公共子串,注意 less than 3,是小于3,不等于
#include 
#include 
#include 
#include 
#define Max 4010
#define INF 0x3f3f3f3f
using namespace std;
int Long[Max],Next[202];
char ch[Max][202];
struct snode{
	char ch3[202];
}chtemp[Max];

bool cmp(struct snode a,struct snode b)
{
	int temp=strcmp(a.ch3,b.ch3);
	if(temp>=0)
		return 0;
	return 1;
}

void Get_next(char ch1[],int Tlen)
{
	int i=0,j=-1;
	Next[0]=-1;
	while(i=Tlen)
		return 1;
	return 0;
}

int main()
{
	char ch1[202];
	int min,mini,i,j,j1,j2,temp,n,m,k,pd,pdi,End;
	while(scanf("%d",&n)!=EOF&&n)
	{
		min=INF;
		memset(ch,0,sizeof(ch));
		for(i=1;i<=n;i++)
		{
			scanf("%s",ch[i]);
			temp=strlen(ch[i]);
			Long[i]=temp;
			if(temp=1;i--)
		{
			End=Long[mini]-i;
			for(j=0;j<=End;j++)
			{
				memset(ch1,0,sizeof(ch1));
				for(j1=j,j2=0;j2


你可能感兴趣的:(poj,KMP)