参考:https://www.cnblogs.com/fengziwei/p/7827959.html
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void DP()
{
string s1, s2;
string ans = "";
int max = 0;
int ii;
cin >> s1 >> s2;
int **dp;//记录当前ij相等时 连续长度 如果当前ij不等直接为0
dp = new int*[s1.size()+1];
for (int i = 0; i <= s1.size(); i++)
{
dp[i] = new int[s2.size()+1];
for (int j = 0; j <= s2.size(); j++)
{
dp[i][j] = 0;
}
}
for (int i = 1; i <= s1.size(); i++)
{
for (int j = 1; j <= s2.size(); j++)
{
if (s1[i - 1] == s2[j - 1]) //注意字符串下标 和动态规划不一样 相等才记录
{
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else if (s1[i - 1] != s2[j - 1])//最后字符不相等直接gg
{
dp[i][j] = 0;
}
if (dp[i][j] > max)ii = i;
max = (dp[i][j] > max) ? dp[i][j] : max;
}
}
cout << max<<endl;
int start = (ii-1) - max;
for (int i = start+1; i <= ii - 1; i++)
{
ans += s1[i];
}
cout << ans << endl;
for (int i = 0; i <= s1.size(); i++)
{
delete[]dp[i];
dp[i] = nullptr;
}
delete[]dp;
dp = nullptr;
}
int main()
{
DP();
//cout<<"hello"<<endl;
return 0;
}
abc11111abcde
abc33333333abcde
5
abcde