目标串与模式串匹配的子串总数-动态规划

题目描述

[115. 不同的子序列]https://leetcode-cn.com/problems/distinct-subsequences/

题解

class Solution {
    public int numDistinct(String s, String t) {
        int m = s.length();
        int n = t.length();
        if(m<n){//处理边界特殊情况
            return 0;
        }
        int[][] dp = new int[m+1][n+1];
        for(int i=0;i<=m;i++){//空串是任何串的子序列
            dp[i][n] = 1;
        }
        for(int i=s.length()-1;i>=0;i--){
            char sChar = s.charAt(i);
            for(int j=t.length()-1;j>=0;j--){
                char tChar = t.charAt(j);
                if(sChar == tChar){//当前字符相等
                    dp[i][j] = dp[i+1][j+1] + dp[i+1][j];//可以选择匹配当前字符;或者不匹配当前字符,在目标串的右边求解
                }else{//当前字符不相等
                    dp[i][j] = dp[i+1][j];//只能在目标串的右边求解
                }
            }
        }
        return dp[0][0];
    }
}
posted @ 2021-03-17 22:07  HickeyZhang  阅读(164)  评论(0)    收藏  举报