zoukankan      html  css  js  c++  java
  • LintCode 77: 最长公共子序列

    public class Solution {
        /**
         * @param A, B: Two string.
         * @return: the length of the longest common substring.
         */
        public int longestCommonSubsequence(String A, String B) {
            int lenA = A.length();
        	int lenB = B.length();
        	if(lenA==0 || lenB==0){
        	    return 0;
        	}
            int [][] result = new int[lenA+1][lenB+1];
            int maxResult = -1;
            for(int i=0;i<lenA+1;i++){
            	for(int j=0;j<lenB+1;j++){
            		result[i][j] = 0;
            	}
            }
            for(int i=1;i<=lenA;i++){
                for(int j=1;j<=lenB;j++){
                    if(A.charAt(i-1) == B.charAt(j-1)){
                        result[i][j] = result[i-1][j-1]+1;
                    }else{
                    	result[i][j] = max(result[i-1][j],result[i][j-1]);
                    }
                    maxResult = max(result[i][j],maxResult);
                }
            }
            return maxResult;
        }
        public int max(int src,int dst){
            if(src > dst){
                return src;
            }else{
                return dst;
            }
        }
    }
    

      思路:

        经典dp

        (1)找状态,从后到前,目标:result[i][j]表示,A[i]与B[j]的最长公共子序列(i<=n,j<=m)。

        (2)确定状态转移方程,二种决策(a[i] b[i]一样,  a[i] b[i]不一样)

        (3)复杂度为O(lenA*lenB),此种解法为递推,从前到后,使用循环来写。

        (4)还有一种解法是递归,从后到前,记忆化搜索(备忘录)

        (5)边界条件是遇到0

  • 相关阅读:
    LabVIEW-水仙花数
    NRF51822自学笔记(一) 流水灯
    机器学习第四次作业
    4.K均值算法--应用
    机器学习第三次
    机器学习第二次专业
    算符优先分析
    自下而上语法分析
    递归下降语法分析
    LL(1)文法的判断,递归下降分析程序
  • 原文地址:https://www.cnblogs.com/xieweichong/p/5943877.html
Copyright © 2011-2022 走看看