int LCS(string str1, string str2) //返回最长公共字串长度
{
//创建矩阵
int** martix;
martix = new int*[str1.length()+1];
for(int i =0; i<=str1.length(); i++)
{
martix[i] = new int[str2.length()+1];
}
//初始化矩阵
for (int i = 0; i <= str1.length(); i++) martix[i][0] = 0;
for (int j = 0; j <= str2.length(); j++) martix[0][j] = 0;
//填充矩阵
for (int i = 1; i <= str1.length(); i++)
{
for (int j = 1; j <= str2.length(); j++)
{
if (str1[i-1] == str2[j-1])
{
martix[i][j] = martix[i-1][j-1] + 1;
}
else
{
martix[i][j]=0;
}
}
}
//找到最大处即最长处
int max(0),imax(0),jmax(0);
for (int i = 0; i <= str1.length(); i++)
{
for (int j = 0; j <= str2.length(); j++)
{
if(martix[i][j]>max)
{
max = martix[i][j];
imax = i;
jmax = j;
}
}
}
cout<<"最长公共字串长度为:"<<max<<endl;
cout<<"最长公共字串为:";
for(int i = max; i>0; i--)
{
cout<<str1[imax-i];
}
cout<<endl;
for(int i =0; i<=str1.length(); i++)
{
delete[] martix[i];
}
delete[] martix;
return max;
}