zoukankan      html  css  js  c++  java
  • 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的前部分里,反之亦然。

     1 public class Solution {
     2     /**
     3      * @param A, B: Two strings.
     4      * @return: The length of longest common subsequence of A and B.
     5      */
     6     public int longestCommonSubsequence(String A, String B) {
     7         // write your code here
     8         if (A == null || B == null) {
     9             return 0;
    10         }
    11         
    12         int lenA = A.length();
    13         int lenB = B.length();
    14         int[][] D = new int[lenA + 1][lenB + 1];
    15         
    16         for (int i = 0; i <= lenA; i++) {
    17             for (int j = 0; j <= lenB; j++) {
    18                 if (i == 0 || j == 0) {
    19                     D[i][j] = 0;
    20                 } else {
    21                     if (A.charAt(i - 1) == B.charAt(j - 1)) {
    22                         D[i][j] = D[i - 1][j - 1] + 1;
    23                     } else {
    24                         D[i][j] = Math.max(D[i - 1][j], D[i][j - 1]);
    25                     }
    26                 }
    27             }
    28         }
    29         
    30         return D[lenA][lenB];
    31     }
    32 }
    View Code

     https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/lintcode/dp/longestCommonSubsequence.java

  • 相关阅读:
    git commit 合并
    git 管理 Linux 文件系统
    python 全局变量的使用
    JavaScript 中 类型转换
    canconfig 配置命令
    python 调用 shell 命令
    python 3 操作mysql数据库的方法
    python 字符串和整数,浮点型互相转换
    JavaScript 里面的整数 位 操作
    JavaScript 使用 php 的变量
  • 原文地址:https://www.cnblogs.com/yuzhangcmu/p/4199531.html
Copyright © 2011-2022 走看看