一、题目
二、思路
1、求的的是两个字符串的公共子串,子串是连续的
2、构建二维动态数组,记录最长的子串,都初始化为0
3、当两个字符相等时,dp[i][j]=dp[i-1][j-1]+1;
4、实时比较最长的子串,记录子串的最后一位的下标
三、代码
class Solution {
public:
/**
* longest common substring
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @return string字符串
*/
string LCS(string str1, string str2) {
int len1=str1.length();
int len2=str2.length();
vector<vector<int>>dp(len1+1,vector<int>(len2+1,0));
int Count=0;
int pos=0;
for(int i=1;i<len1+1;++i)
{
for(int j=1;j<len2+1;++j)
{
//相等就+1
if(str1[i-1]==str2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
if(dp[i][j]>Count)
{
Count=dp[i][j];
//注意是j
pos=j-Count;
}
Count=Count>dp[i][j]?Count:dp[i][j];
}
}
return str2.substr(pos,Count);
}
};