两个字符串的最长公共子串与最长公共子序列的区别:
最长公共子串要求在原字符串中是连续的,而子序列只需要保持相对顺序一致,并不要求连续。
这里放自己写的代码
最长公共子序列
class Solution {
public:
int longestCommonSubsequence(string text1, string text2)
{
int len1 =text1.size(),len2 =text2.size();
vector<vector<int> >dp(len1+1,vector<int>(len2+1,0));
int ret =0;
for(int i=1;i <=len1;i++)
{
for(int j=1;j <=len2;j++)
{
if(text1[i-1] ==text2[j-1])
{
dp[i][j] =dp[i-1][j-1] +1;
}else
dp[i][j] =max(dp[i-1][j],dp[i][j-1]);
ret =max(dp[i][j],ret);
}
}
return ret;
}
};
最长公共子串
public int getLCS(String s, String t)
{
if (s == null || t == null)
{
return 0;
}
int result = 0;
int sLength = s.length();
int tLength = t.length();
vector<vector<int> >dp(sLength+1,vector<int>(tLength+1,0));
for (int i = 1; i <= sLength; i++)
{
for (int k = 1; k <= tLength; k++)
{
if (s[i-1] == t[k - 1]))
{
dp[i][k] = dp[i - 1][k - 1] + 1;
result = max(dp[i][k], result);
}
}
}
return result;
}