Lintcode:Longest Common Subsequence 解题报告
Longest Common Subsequence
原题链接:http://lintcode.com/zh-cn/problem/longest-common-subsequence/
Given two strings, find the longest comment subsequence (LCS).
Your code should return the length of LCS.
样例
For "ABCD" and "EDCA", the LCS is "A" (or D or C), return 1
For "ABCD" and "EACB", the LCS is "AC", return 2
说明
What's the definition of Longest Common Subsequence?
* The longest common subsequence (LCS) problem is to find the longest subsequence common to all sequences in a set of sequences (often just two). (Note that a subsequence is different from a substring, for the terms of the former need not be consecutive terms of the original sequence.) It is a classic computer science problem, the basis of file comparison programs such as diff, and has applications in bioinformatics.
* https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
标签 Expand
SOLUTION 1:
DP.
1. D[i][j] 定义为s1, s2的前i,j个字符串的最长common subsequence.
2. D[i][j] 当char i == char j, D[i - 1][j - 1] + 1
当char i != char j, D[i ][j - 1], D[i - 1][j] 里取一个大的(因为最后一个不相同,所以有可能s1的最后一个字符会出现在s2的前部分里,反之亦然。
 public class Solution {
     /**
      * @param A, B: Two strings.
      * @return: The length of longest common subsequence of A and B.
      */
     public int longestCommonSubsequence(String A, String B) {
         // write your code here
         if (A == null || B == null) {
             return 0;
         }
         int lenA = A.length();
         int lenB = B.length();
         int[][] D = new int[lenA + 1][lenB + 1];
         for (int i = 0; i <= lenA; i++) {
             for (int j = 0; j <= lenB; j++) {
                 if (i == 0 || j == 0) {
                     D[i][j] = 0;
                 } else {
                     if (A.charAt(i - 1) == B.charAt(j - 1)) {
                         D[i][j] = D[i - 1][j - 1] + 1;
                     } else {
                         D[i][j] = Math.max(D[i - 1][j], D[i][j - 1]);
                     }
                 }
             }
         }
         return D[lenA][lenB];
     }
 }
Lintcode:Longest Common Subsequence 解题报告的更多相关文章
- Lintcode: Longest Common Substring  解题报告
		Longest Common Substring 原题链接: http://lintcode.com/zh-cn/problem/longest-common-substring/# Given tw ... 
- 【LeetCode】873. Length of Longest Fibonacci Subsequence 解题报告(Python)
		[LeetCode]873. Length of Longest Fibonacci Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: ... 
- 【LeetCode】673. Number of Longest Increasing Subsequence 解题报告(Python)
		[LeetCode]673. Number of Longest Increasing Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https:/ ... 
- LintCode Longest Common Subsequence
		原题链接在这里:http://www.lintcode.com/en/problem/longest-common-subsequence/ 题目: Given two strings, find t ... 
- 【LeetCode】594. Longest Harmonious Subsequence 解题报告(Python & C++)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计次数 日期 题目地址:https://leetc ... 
- 【LeetCode】300. Longest Increasing Subsequence 解题报告(Python & C++)
		作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ... 
- LeetCode: Longest Common Prefix 解题报告
		Longest Common Prefix Write a function to find the longest common prefix string amongst an array of ... 
- lintcode 77.Longest Common Subsequence(最长公共子序列)、79. Longest Common Substring(最长公共子串)
		Longest Common Subsequence最长公共子序列: 每个dp位置表示的是第i.j个字母的最长公共子序列 class Solution { public: int findLength ... 
- 【Lintcode】077.Longest Common Subsequence
		题目: Given two strings, find the longest common subsequence (LCS). Your code should return the length ... 
随机推荐
- postmessage and sendmessage
			从msdn上看二者的解释: postmessage : Places (posts) a message in the message queue associated with the thread ... 
- php安装 出现Sorry, I cannot run apxs. ***错误解决方法
			# tar zvxf php-5.1.2.tar.gz# cd php-5.1.2# ./configure --prefix=/usr/local/php --with-mysql=/usr/loc ... 
- centos7 安装遇到的问题
			win7系统下安装centos7 1:首先是在U盘启动时候遇到的,Warning: /dev/root does not exist.没找到U盘的位置.这个问题两种方法,一种是去找到对应的设备名字 然 ... 
- The method getServletContext() is undefined for the type HttpServletRequest
			request.getServletContext().getRealPath("/") 已经加入了 sun runtime library但是还是提示错误 是因为 写法过时了改成 ... 
- SQL Server 表分区之水平表分区
			什么是表分区? 表分区分为水平表分区和垂直表分区,水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表:而垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字 ... 
- intellij idea 双击选中一个变量而不是单词
			在keymap 里搜索 select Word at caret ,然后双击并在弹出选项里选add mouse shortcut,然后选double click,再在下面click pad 区域点一下 ... 
- oracle三大范式(转载)
			标准化表示从你的数据存储中移去数据冗余 (redundancy)的过程.如果数据库设计达到了完全的标准化,则把所有的表通过关键字连接在一起时,不会出现任何数据的复本 (repetition).标准化的 ... 
- golang学习笔记 ---TCMalloc
			图解 TCMalloc 前言 TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配.它具有现代化内存分配器的基本特征:对抗 ... 
- oracle中exists和in的比较
			exists 是Oracle sql中的一个函数.表示是否存在符合某种条件的记录.如 select * from A,B where A.id=B.id and exists (SELECT * FR ... 
- T4文本模板转换过程
			T4文本模板转换过程将文本模板文件作为输入,生成一个新的文本文件作为输出. 例如,可以使用文本模板生成 Visual Basic 或 C# 代码,还可以生成 HTML 报告. 有三个组件参与这一过程: ... 
