Distinct Subsequences
题目实际意思就是字符串s,删除自己的字符,有多少种方法能得到子字符串t
距离S = "rabbbit", T = "rabbit",那么s跟t有一个字符b不一致,那么s有3个字符b,可以在这三个位置删除,每个位置就是一种方法,于是结果是3;
例子:S:rabb T:rab s的第i个字符是b,t的第j个字符也是b,于是s[i-1]就是rab,t[j-1]是ra,t[j]是rab,ra是子字符串,rab也是子字符串
那么当S[ i ] == T[ j]时,动态规划公式用实际情况表达出来就是:
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
T: rab rab ra
S; rabb rab rab
public static int subStr(String s, String t) {
if (s == null)
return 1;
if (t == null)
return 1;
int m = s.length();
int n = t.length();
int[][] dp = new int[m + 1][n + 1];
for (int j = 0; j <= m; j++) dp[j][0] = 1;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s.charAt(i-1) == t.charAt(j-1)) {
dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
} else {
dp[i][j] = dp[i-1][j];
}
}
}
System.out.println(dp[m][n]);
return dp[m][n];
}
网友评论