#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
//#include "Customer.h"
using namespace std;
//最长公共字符串——动态规划
//假设需要求得字符串为str1,str2。函数f(m,n)分别为 str1[m],str2[n]
//结尾的公共字符串长度。
//有以下递推公式: 递推边界
// f(m,n)=0 str1[m]!=str2[n] f(0,n)=0;
// f(m,n)=f(m-1,n-1)+1 str1[m]!=str2[n] f(m,0)=0;
int main()
{
string str1;
string str2;
getline(cin, str1);
getline(cin, str2);
int c[100][100] = { 0 };
for (int i = 0; i < str1.length(); i++)
{
for (int j = 0; j < str2.length(); j++)
{
if (str1[i] == str2[j])
{
if (i == 0 || j == 0)
c[i][j] = 1;
else
c[i][j] = c[i - 1][j - 1] + 1;
}
else
c[i][j] = 0;
}
}
int besti = 0, bestj = 0;
int count = 0;
for (int i = 0; i < str1.length(); i++)
{
for (int j = 0; j < str2.length(); j++)
{
if (c[i][j] > count)
{
count = c[i][j];
besti = i;
bestj = j;
}
}
}
cout << "最长公共字符串长度: " << count << endl;
cout << "str1公共子串结束下标: " << besti << endl;
cout << "str2公共子串结束下标: " << bestj << endl;
return 0;
}
最长公共字符串
最新推荐文章于 2022-02-10 18:31:00 发布