第二位为已经查找到子序列字符的数量,一开始没想到。
e.g
给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。
字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)
题目数据保证答案符合 32 位带符号整数范围。
输入:s = "rabbbit", t = "rabbit" 输出:3 解释: 如下图所示,有 3 种可以从 s 中得到 "rabbit" 的方案。 (上箭头符号 ^ 表示选取的字母) rabbbit ^^^^ ^^ rabbbit ^^ ^^^^ rabbbit ^^^ ^^^
int[][] dp = new int[s.length() + 1][t.length() + 1]; for (int i = 0; i < dp.length; i++) { dp[i][0] = 1; } for (int i = 0; i < s.length(); i++) { for (int j = 0; j < t.length(); j++) { if (s.charAt(i) == t.charAt(j)) { dp[i + 1][j + 1] = dp[i][j] + dp[i][j + 1]; } else { dp[i + 1][j + 1] = dp[i][j + 1]; } } }
初始化的小技巧也要注意