您的位置:首页 > 产品设计 > UI/UE

longest-common-subsequence

2015-06-09 08:46 495 查看


中等 最长公共子序列

37%

通过

给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。

您在真实的面试中是否遇到过这个题?

Yes

样例

给出"ABCD" 和 "EDCA",这个LCS是 "A" (或 D或C),返回1
给出 "ABCD" 和 "EACB",这个LCS是"AC"返回
2

注意

说明

最长公共子序列的定义:

最长公共子序列问题是在一组序列(通常2个)中找到最长公共子序列(注意:不同于子串,LCS不需要是连续的子串)。该问题是典型的计算机科学问题,是文件差异比较程序的基础,在生物信息学中也有所应用。
https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
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) {
        int n = A.length();
	    int m = B.length();
        int f[][] = new int[n + 1][m + 1];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                f[i + 1][j + 1] = Math.max(f[i][j + 1], f[i + 1][j]);
                if(A.charAt(i) == B.charAt(j))
                    f[i + 1][j + 1] = f[i][j] + 1;
            }
        }
        return f
[m];
    }
}


REF: http://blog.csdn.net/yysdsyl/article/details/4226630 http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2764625.html http://www.cnblogs.com/xudong-bupt/archive/2013/03/15/2959039.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: