LeetCode1143. 最长公共子序列

LeetCode1143. 最长公共子序列_第1张图片

找到了一个优质的解答

这里附上Java版本递归和非递归方式(说明递归方式会超时)

public static int longestCommonSubsequence(String text1, String text2) {
        return dp(text1.length()-1,text2.length()-1,text1,text2);
    }

    private static int dp(int i, int j,String s1,String s2) {
        if(i==-1 || j==-1){
            return 0;
        }
        if(s1.charAt(i) == s2.charAt(j)){
            return dp(i-1,j-1,s1,s2)+1;
        }else {
            return Math.max(dp(i-1,j,s1,s2),dp(i,j-1,s1,s2));
        }
    }

非递归:

public static int longestCommonSubsequence(String text1, String text2) {
        char[] c1 = text1.toCharArray();
        char[] c2 = text2.toCharArray();
        int[][]dp = new int[c1.length+1][c2.length+1];
        for (int i = 1; i < c1.length+1; i++) {
            for (int j = 1; j < c2.length+1; j++) {
                if(c1[i-1]==c2[j-1]){
                    dp[i][j]=dp[i-1][j-1]+1;
                }else {
                    dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        return dp[c1.length][c2.length];
    }

 

你可能感兴趣的:(算法,LeetCode,1143.,最长公共子序列)