动态规划,类似的字符处理题有很多,可以结合起来一起做
注意的点是根据字符串长度分类讨论
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str1[301];
char str2[301];
char res[301] = {0};
int dp[301][301] = {0};
int main()
{
//gets(str1);
//gets(str1);
scanf("%s",str1);
scanf("%s",str2);
int m = strlen(str1);
int n = strlen(str2);
int max = 0;
int start = 0;
if(m < n)
{
for (int i = 1; i <= m; i++) {
char c1 = str1[i - 1];
for (int j = 1; j <= n; j++) {
char c2 = str2[j - 1];
if (c1 == c2) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
if(dp[i][j] > max)
{
max = dp[i][j];
start = i - max;
}
}
}
for(int i=start; i < start+max; i++)
{
printf("%c", str1[i]);
}
printf("\n");
}
else
{
for (int i = 1; i <= n; i++) {
char c1 = str2[i - 1];
for (int j = 1; j <= m; j++) {
char c2 = str1[j - 1];
if (c1 == c2) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
if(dp[i][j] > max)
{
max = dp[i][j];
start = i - max;
}
}
}
for(int i=start; i < start+max; i++)
{
printf("%c", str2[i]);
}
printf("\n");
}
return 0;
}