题目
有两个字符串str和str2,求出两个字符串中最长公共子串长度。
比如:str=acbcbcef,str2=abcbced,则str和str2的最长公共子串为bcbce,最长公共子串长度为5。
思路
动态规划
转移方程:
代码:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
#define maxSize 100
int dp[maxSize][maxSize]={0};
int maxSubLength(string str1,string str2)
{
//方便操作
str1=" "+str1;
str2=" "+str2;
int maxLength=-1;
for(int i=1;i<str1.length();i++)
{
for(int j=1;j<str2.length();j++)
{
if(str1[i]==str2[j])
{
dp[i][j]=dp[i-1][j-1]+1;
maxLength=maxLength>dp[i][j]?maxLength:dp[i][j];
}
else
{
dp[i][j]=0;
}
}
}
return maxLength;
}
int main()
{
string str1,str2;
cin>>str1>>str2;
cout<<maxSubLength(str1,str2)<<endl;
system("pause");
return 0;
}