1. 程式人生 > 其它 >Spark實現求平均值

Spark實現求平均值

1143. 最長公共子序列

題目描述

給定兩個字串 text1 和 text2,返回這兩個字串的最長 公共子序列 的長度。如果不存在 公共子序列 ,返回 0 。

一個字串的 子序列 是指這樣一個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。

例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
兩個字串的 公共子序列 是這兩個字串所共同擁有的子序列。

思路分析

動態規劃的最長公共子序列模板題目。設定dp[i] [j]表示兩個字串前i個字元和前j個字元的最長公共子序列,那麼當text1[i]==text2[j]的時候,就等於dp[i] [j]=dp[i-1] [j-1]+1,當不相等的時候,那麼dp[i] [j]=max(dp[i-1] [j],dp[i] [j-1]);本題中為了方便討論邊界,計算dp[i] [j]的時候比較的是第i-1個字元和第j-1個字元,否則在計算dp[0] [0] 和dp[0] [1] 和dp[1] [0]會越界。

程式碼實現

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int len1=text1.size();
        int len2=text2.size();
        vector<vector<int>>dp(len1+1,vector<int>(len2+1,0));

        for(int i=1;i<=len1;i++)
        {
            for(int j=1;j<=len2;j++)
            {

                if(text1[i-1]==text2[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

            }
        }

        return dp[len1][len2];
    }
};