首页 > 代码库 > 最长公共子序列简单实现

最长公共子序列简单实现

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;}

 

最长公共子序列简单实现