// 定义 dp[i][j] 为 s 前 i 个字符组成的字符串中的子序列与 t 前 j 个字符组成的字符串匹配的方案数 int[][] dp = newint[m + 1][n + 1]; dp[0][0] = 1; for (inti=1; i <= m; i++) { dp[i][0] = 1; } for (intj=1; j <= n; j++) { dp[0][j] = 0; }
for (inti=1; i <= m; i++) { chara= s.charAt(i - 1); for (intj=1; j <= n; j++) { // 目标:b 一定要被匹配 charb= t.charAt(j - 1);
if (a == b) { // 使用 a 字符去匹配 b dp[i][j] = dp[i - 1][j - 1]; // 不使用 a 字符去匹配 b dp[i][j] += dp[i - 1][j]; } else { // 无法使用 a 字符去匹配 b dp[i][j] = dp[i - 1][j]; } } }