不同的子序列

給出字符串S和字符串T,計算S的不同的子序列中T出現(xiàn)的個數(shù)。

子序列字符串是原始字符串通過刪除一些(或零個)產(chǎn)生的一個新的字符串,并且對剩下的字符的相對位置沒有影響。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。
樣例
給出S = "rabbbit", T = "rabbit"

返回 3

class Solution {
public:    
    /**
     * @param S, T: Two string.
     * @return: Count the number of distinct subsequences
     */
     int numDistinct(string &S, string &T) {
        // write your code here
        int tLength = T.size();
        int sLength = S.size();
        vector<vector<int>>dp(tLength+1,vector<int>(sLength+1,0)) ;
        for(int i = 0;i < sLength+1;i++) {
            dp[0][i] = 1;
        }
        for(int i = 1; i<tLength+1;i++){
            for(int j=1; j<sLength+1;j++) {
                //之前在這里寫成S[j-1] == T[i-1]導(dǎo)致花了很多時間,動態(tài)規(guī)劃的狀態(tài)方程和操作字符安串的下標(biāo)一般是不對稱的?。?!
                if(S[j-1] == T[i-1]) {
                    dp[i][j] = dp[i][j-1] + dp[i-1][j-1];
                } else {
                    dp[i][j] = dp[i][j-1];
                }
              //  dp[i][j] = ((S[j] == T[i])?(dp[i-1][j-1]):0) + dp[i][j-1];
            }
        }
        return dp[tLength][sLength];
    }
};

參考LeetCode
解釋
dp[i][j] = dp[i][j-1] + dp[i-1][j-1];

dp[i][j] 為字符串S(0,i-1)到T(0,j-1)的S的子序列中T出現(xiàn)的個數(shù)
當(dāng)S[j-1] == T[i-1]

  • dp[i][j-1]表示前面符合條件的子串
  • dp[i-1][j-1]表示加上字符s[i-1]后符合條件個數(shù)

動態(tài)規(guī)劃的狀態(tài)方程和操作字符安串的下標(biāo)一般是不對稱的?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,669評論 0 18
  • 給出字符串S和字符串T,計算S的不同的子序列中T出現(xiàn)的個數(shù)。 子序列字符串是原始字符串通過刪除一些(或零個)產(chǎn)生的...
    Arnold134777閱讀 847評論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,936評論 0 33
  • 分治方法 將問題劃分成互不相交的子問題 遞歸地求解子問題 將子問題的解組合起來 動態(tài)規(guī)劃(兩個要素:最優(yōu)子結(jié)構(gòu)、子...
    superlj666閱讀 598評論 0 0
  • 明天的你會感謝今天的你 ————————————分割線 晚上,8點11分。 QQ消息。 “走吧?” “嗯,好的?!?..
    沂尾魚閱讀 211評論 0 0

友情鏈接更多精彩內(nèi)容