OJ题--最大相同子串

问题描述 :
输入两个字符串,获取两个字符串中最长相同子串并输出。
如果有多个相同子串,则输出(按ASCII排序)最小的那个“最长相同子串”。
如果无相同子串,则输出空字符串(即空行)。

输入说明 :
输入多组测试数据,每组测试数据包含两行。
每行包含一个字符串,字符串中无空格,也无空字符串。

输出说明 :
对于每组测试数据,输出最长子串。如果最长子串为空,则输出一个空行。
每组输出占一行,行首与行尾无多余空格,也无多余空行。

输入范例 :
abcded123456aabbcc
abcdaa1234
abcdabcdabcd
abcda
输出范例 :
1234
abcda

‘修修改改一上午,第21次,AC,心太累!’

#include
#include
#define max 1000

//返回str中从start位置开始的len个字符
void getsub(char str[],int start,int len,char subs[]){
	int i,j=0;
	for(i=start;i<start+len;i++)
		subs[j++]=str[i];
	subs[j]='\0';
}

int main(){
	int i,j,k;
	char a[max],b[max],c[max],sub[max]={0};
	while(gets(a)){
		memset(sub,0,sizeof(sub));
		gets(b);
		for(i=0;a[i]!='\0';i++){
			for(j=0;b[j]!='\0';){
				while(a[i]!=b[j]&&b[j]!='\0')
					j++;
				if(b[j]=='\0')
					break;
				else{
					k=0;
					while(a[i+k]==b[j+k]&&a[i+k]!='\0'&&b[j+k]!='\0')
						k++;
					getsub(b,j,k,c);
					if(strlen(c)>strlen(sub)||(strlen(c)==strlen(sub)&&strcmp(c,sub)<0))
						strcpy(sub,c);
					j++;
				}
			}
		}
		puts(sub);
		memset(a,0,sizeof(a));
	}
	return 0;
}



‘改是改成功了,可是原因不晓得是什么,自定义函数getsub()中直接返回字符串数组时会判RE,比较相同长度字符串的ASCII值大小时直接比较首个字符的ASCII值也不行?!先这样了。。’

你可能感兴趣的:(OJ题--最大相同子串)