给定两个字符串 s 和 t ,请问 s 有多少个子序列等于 t 。
s 的子序列指从 s 中删除任意位置任意个字符留下的字符串。
数据范围: 两个字符串的长度都满足 ,两个字符串都仅包含小写英文字母,且结果一定在 之内
"noowcoder","nowcoder"
2
可以删除第二个或第三个
"nowcooder","nowwcoder"
0
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @param t string字符串 * @return int整型 */ public int countSubseq (String s, String t) { // write code here int m = s.length(); int n = t.length(); if (m < n) { return 0; } int[][] dp = new int[m + 1][n + 1]; // t[n:]为空串 for (int i = 0; i <= m; i++) { dp[i][n] = 1; } // s[m:]为空串 t[j:]为非空串 for (int j = 0; j < n; j++) { dp[m][j] = 0; } 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]; } }