输入两个长度不超过15的字符串,输出这两个字符串的最长相同子串,若有多个,则输出在第一个字符串中位置相对靠前的子串。
测试样例:
a
a
a
b
abc
cde
abcdabcdef
bcdefabcd
abcdefgh
atbcdtdefg
abcdefgh
bcde
aaaaaaaaaa
aaaaaaaaab
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s1[20], s2[20];
while (cin >> s1 >> s2)
{
for (int length_substr = strlen(s1); length_substr > 0; length_substr--)//字串长度递减
{
char c1[20];
strncpy_s(c1, s1, strlen(s1));
c1[length_substr] = '\0';
for (char *p1 = s1; *(p1 + length_substr - 1) != '\0'; p1++)//子串位置后移
{
char pp1[20];
strncpy_s(pp1, p1, length_substr);
*(pp1 + length_substr) = '\0';
char c2[20];
strncpy_s(c2, s2, strlen(s2));
c2[strlen(c2)] = '\0';
for (char *p2 = c2; *p2 != '\0'; p2++)//子串位置比对
{
char pp2[20];
strncpy_s(pp2, p2, length_substr);
*(pp2 + length_substr) = '\0';
if (strncmp(pp1, pp2, length_substr) == 0)
{
cout << pp1;
goto E;
}
}
}
}
E: cout << endl;
}
return 0;
}