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; }
时间: 2024-11-02 13:43:19