最长公共子序列(LCS---动态规划)
2016-08-28 11:09
260 查看
题目描述:求两个字符串的最长公共子序列
子序列:字符之间可以不连续
吗
字串:字符之间必须是连续的
DP最终处理的还是数值(极值做最优解),找到了最优值,就找到了最优方案;为了找到最长的LCS,我们定义dp[i][j]记录序列LCS的长度,合法状态的初始值为当序列X的长度为0或Y的长度为0,公共子序列LCS长度为0,即dp[i][j]=0,所以用i和j分别表示序列X的长度和序列Y的长度,状态转移方程为
1.
dp[i][j] = 0
如果i=0或j=0
2.
dp[i][j] = dp[i-1][j-1] + 1
如果X[i-1] = Y[i-1]
3.
dp[i][j] = max{ dp[i-1][j], dp[i][j-1] }
如果X[i-1] != Y[i-1]
主要代码:
class LCS {
public:
int f
a668
indLCS(string A, int n, string B, int m) {
// write code here
//动态规划
int dp[n+1][m+1];//表示长度是n m字符串的公共子序列长度
//边界初始化
for(int i=0;i<n+1;i++)
dp[i][0]=0;//表示长度为i的字符串(A中连续i个字符,A[0]表示第1个字符)和长度为0的字符串
for(int j=0;j<m+1;j++)
dp[0][j]=0;
//递推关系
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
if(A.at(i-1)==B.at(j-1))//i-1 j-1表示在字符串中的位置,注意相同变量意义上的区别
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
return dp
[m];//返回结果
}
};
}
};
题目描述:求两个字符串的最长公共子序列
子序列:字符之间可以不连续
吗
字串:字符之间必须是连续的
DP最终处理的还是数值(极值做最优解),找到了最优值,就找到了最优方案;为了找到最长的LCS,我们定义dp[i][j]记录序列LCS的长度,合法状态的初始值为当序列X的长度为0或Y的长度为0,公共子序列LCS长度为0,即dp[i][j]=0,所以用i和j分别表示序列X的长度和序列Y的长度,状态转移方程为
1.
dp[i][j] = 0
如果i=0或j=0
2.
dp[i][j] = dp[i-1][j-1] + 1
如果X[i-1] = Y[i-1]
3.
dp[i][j] = max{ dp[i-1][j], dp[i][j-1] }
如果X[i-1] != Y[i-1]
主要代码:
class LCS {
public:
int f
a668
indLCS(string A, int n, string B, int m) {
// write code here
//动态规划
int dp[n+1][m+1];//表示长度是n m字符串的公共子序列长度
//边界初始化
for(int i=0;i<n+1;i++)
dp[i][0]=0;//表示长度为i的字符串(A中连续i个字符,A[0]表示第1个字符)和长度为0的字符串
for(int j=0;j<m+1;j++)
dp[0][j]=0;
//递推关系
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
if(A.at(i-1)==B.at(j-1))//i-1 j-1表示在字符串中的位置,注意相同变量意义上的区别
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
return dp
[m];//返回结果
}
};
}
};
相关文章推荐
- 动态规划之最长公共子序列(LCS)
- C++ 动态规划-LCS最长公共子序列
- (动态规划)LCS-最长公共子序列
- Java-LCS最长公共子序列(动态规划实现)
- NYOJ - 36 - 最长公共子序列(LCS,动态规划DP)
- 动态规划--最长公共子序列(LCS).九度1042
- hdu 1503:Advanced Fruits(动态规划 DP & 最长公共子序列(LCS)问题升级版)
- 动态规划 - 最长公共子序列(LCS)
- 编程练习-动态规划(最长公共子序列LCS)
- 动态规划解最长公共子序列问题LCS(一)
- 动态规划(一)最长公共子序列问题 LCS 总结
- 动态规划_求最长公共子序列LCS
- //九度OJ教程98 动态规划之LCS(最长公共子序列)
- 动态规划 LCS 求两个序列A,B中所有的最长公共子序列
- 使用动态规划求解最长公共子序列(LCS)
- 最长公共子序列LCS(动态规划)
- [动态规划] [LCS算法] 最长公共子序列 longest common subsequence
- 动态规划之最长公共子序列问题(LCS)
- 动态规划 最长公共子序列(LCS)问题
- 动态规划经典问题---最长公共子序列(LCS)