【问题描述】
编写一个程序,对输入的字符串s和t,求其最长的公共子字符串。
【输入形式】
从屏幕分行读入串s和t。s和t由任意字符构成,长度都不超50个字符。输入数据确保只有唯一的最长公共子串。如果没有公共子串,打印No Answer
【输出形式】
在单独行上输出串s和串t的最长公共子串,在结尾输出一个回车符。
算法提示:用一个int型的计数器记录当前匹配长度,用一个字符数组记录当前匹配子串,如果存在更长子串,则进行相应替换。
【样例说明】
假设从屏幕输入以下内容:
aabcdababce
12abcabcdace
则输出内容为:
abcda
#include<stdio.h>
int main()
{
char char1[50], char2[50], a[50], b[50];//a[]代表公共字符串,b[]代表最长公共字符串
int i, j, s = 0, k = 0;
gets(char1);
gets(char2);
for (i = 0; i < 50; i++)
{
if (char1[i] != 0)
{
for (j = 0; j < 50; j++)
{
if (char2[j] == 0)
break;
else{
if (char1[i] == char2[j])
{
while (char1[i] == char2[j])
{
a[k] = char1[i], k++;//输出当前的公共字符串
i++, j++;
}
if (k > s)//判断是否是最长公共字符串
{
int t;
for (t = 0; t < k; t++)
{
b[t] = a[t];
s = k;
}
}
k=0;
}
}
}
}
}
if(s==0)
printf("No Answer");
else
for (i = 0; i < s; i++)
printf("%c", b[i]);
return 0;
}