LintCode Longest Common Subsequence(最长公共子序列长度,动态规划入门题)
来源:互联网 发布:知乎 性观念 编辑:程序博客网 时间:2024/05/01 08:31
题目Link:http://www.lintcode.com/en/problem/longest-common-subsequence/
递推公式:
#include <iostream>#include <cstring>using namespace std;class Solution {public: /** * @param A, B: Two strings. * @return: The length of longest common subsequence of A and B. */ int longestCommonSubsequence(string A, string B) { // write your code here //得出两个字符串的长度,如果长度为0直接返回0 int lenA = A.length(); int lenB = B.length(); if(lenA == 0 && lenA == lenB) return 0; //再字符串头添加空位,方便之后编码从1开始 A = " " + A; B = " " + B; int chess[lenA + 1][lenB + 1]; //将表中所有元素置为0 memset(chess, 0, sizeof(int) * lenA * lenB); for (int i = 1; i <= lenA; i++) { for (int j = 1; j <= lenB; j++) { //当两个字符串中 A[i] == A[j], // 则最长LCS = LCS{(A[i - 1], A[j- 1])} + 1 //否则就在LCS{(A[i - 1], A[j])},和 LCS{(A[i], A[j- 1])}中选最长的那个 //这里的A[i],A[j]均指的是字符串 if (A[i] == B[j]) { chess[i][j] = chess[i - 1][j - 1] + 1; } else { chess[i][j] = max(chess[i - 1][j], chess[i][j - 1]); } } } return chess[lenA][lenB]; }};int main() { Solution slo; string str1 = ""; string str2 = ""; cout << slo.longestCommonSubsequence(str1, str2) << endl; return 0;}
以上是AC代码,至于怎么得到最长公共子序列,可以从chess[lenA][lenB]开始回溯(Traceback),得到LCS。
阅读全文
0 0
- LintCode Longest Common Subsequence(最长公共子序列长度,动态规划入门题)
- [动态规划-2] 最长公共子序列-Longest Common Subsequence
- 最长公共子序列(longest common subsequence) 动态规划
- [LintCode] 最长公共子序列 Longest Common Subsequence
- lintcode longest-common-subsequence 最长公共子序列 证明
- [Lintcode]Longest Common Subsequence 最长公共子序列
- 动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
- 转载 动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
- 动态规划解最长公共子序列问题LCS(longest common subsequence)
- Dynamic Programming longest common subsequence(LCS) 动态规划之最长公共子序列
- 最长公共子序列 (LCS,longest common subsequence problem) 动态规划
- 动态规划之最长公共子序列(Longest Common Subsequence)
- [动态规划] [LCS算法] 最长公共子序列 longest common subsequence
- 动态规划之longest common subsequence最大公共子序列
- 最长公共子序列Longest Common Subsequence
- 最长公共子序列 (longest common subsequence)
- 最长公共子序列(Longest Common Subsequence)
- Longest Common Subsequence 最长公共子序列
- MySQL主从复制和读写分离的搭建
- 静态库与动态库的区别以及优缺点,在linux环境下配置静态库与动态库
- 程序猿与艺术的碰撞
- Sending signal. PID: 8561 SIG: 9
- java中NIO和IO的区别
- LintCode Longest Common Subsequence(最长公共子序列长度,动态规划入门题)
- 练习三(第二周)
- 【USACO 2015 Jan Gold】强连通分量+最长路
- Django缓存系统
- HDFS启动过程了解
- 欢迎使用CSDN-markdown编辑器
- UVA 11825 状态压缩DP
- MacOS 开发
- 从零开始的"E"世界(J2SE)