#include <iostream>
#include <algorithm>
#include <string>
#include <stdlib.h>
#include <cmath>
using namespace Std;
int main ()
{
String str1, str2;
String shortstring, longstring;
cin>>str1>>str2;
str1 = "DABCF";
str2 = "Aabe";
if (Str1.length () > Str2.length ())
{
shortstring = str2;
longstring = str1;
}
else {
shortstring = str1;
longstring = str2;
}
int longlength = Longstring.length ();
const int shortlength = Shortstring.length ();
int **array = new Int*[longlength];
for (int i = 0; i < longlength; i++)
{
Array[i] = new Int[shortlength];
}
int maxindex = 0, maxnum = 0;
for (int i = 0; i < shortlength; i++)
{
if (shortstring[i]! = longstring[0])
{
Array[0][i] = 0;
cout << "array[0][" << I << "]" << Array[0][i] << "";
}
else {
Maxnum = 1;
Maxindex = i;
for (; i < shortlength; i++)
{
Array[0][i] = 1;
cout << "array[0][" << I << "]" << Array[0][i] << "";
}
Break
}
}
cout << Endl;
for (int i = 0; i < longlength; i++)
{
if (shortstring[0]! = Longstring[i])
{
Array[i][0] = 0;
cout << "array[" << I << "]" << "[0]" << array[i][0] << "";
}
else {
/*if (i > Maxnum)
{
Maxnum = 1;
Maxindex = i;
}*/
for (; i < longlength; i++)
{
Array[i][0] = 1;
cout << "array[" << I << "]" << "[0]" << array[i][0] << "";
}
Break
}
}
for (int i = 1; i < longlength; i++)
{
for (int j = 1; j < Shortlength; J + +)
{
int maxtemp = 0;
Maxtemp = Max (Array[i-1][j], array[i][j-1]);
cout<< "Max (Array[i-1][j], array[i][j-1])" <<i-1<< "," <<j<< "" <<array[i-1][j " << "" <<
i<< "," <<j-1<<array[i][j-1]<<endl;
cout << maxtemp << Endl;
if (Shortstring.substr (J, maxtemp + 1) = = Longstring.substr (i, maxtemp + 1))
{
cout << Shortstring.substr (J, maxtemp + 1);
ARRAY[I][J] = maxtemp + 1;
if (Array[i][j] > Maxnum)
{
Maxnum = Array[i][j];
Maxindex = j;
}
}
else {
ARRAY[I][J] = maxtemp;
}
}
}
cout<< "Common substrings of two strings are:" <<endl;
cout << shortstring.substr (Maxindex, maxnum);
System ("pause");
return 0;
}
The longest common substring of two strings (C + +, dynamic planning)