题目
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;//t是空串
}
for(int i=m-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
if(s.charAt(i)==t.charAt(j)){
dp[i][j]=dp[i+1][j+1]+dp[i+1][j];
}
else{
dp[i][j]=dp[i+1][j];
}
}
}
return dp[0][0];
}
}
复杂度
时间复杂度:O(mn),其中 m 和 n 分别是字符串 s 和 t 的长度。二维数组 dp 有 m+1 行和 n+1 列,需要对dp 中的每个元素进行计算。
空间复杂度:O(mn),其中 m 和 n 分别是字符串 s 和 t 的长度。创建了 m+1 行n+1 列的二维数组 dp。