不同的子序列

2021-04-07  本文已影响0人  小幸运Q

image.png

dp存储该点含之前的所有子序列匹配的解个数。首先对第一列初始化,先确定第一个是否匹配然后再从第二位根据dp[0][i-1]+s[j]==t[i]?1:0初始化。之后根据dp[i-1][j-1]+dp[i][j-1]计算对应位的值。

class Solution {
public:
    long long numDistinct(string s, string t) {
        if(t.length()==0||s.length()==0||t.length()>s.length()){
            return 0;
        }        
        long long dp[1005][1005]={0};
        int i,j;
        int pre=0;
        if(s[0]==t[0]){
            dp[0][0]=1;
        }
        for(i=1;i<s.length();i++){
            dp[0][i]=dp[0][i-1]+(s[i]==t[0]?1:0);
        }
        for(i=1;i<t.length();i++){
            for(j=i;j<s.length();j++){
                if(t[i]==s[j]){
                    dp[i][j]=dp[i-1][j-1]+dp[i][j-1];
                }
                else{
                    dp[i][j]=dp[i][j-1];
                }
            }
        }
        return dp[t.length()-1][s.length()-1];
    }
};
上一篇 下一篇

猜你喜欢

热点阅读