1.题目描述:
给定一个字符串s和一个字符串t,计算在s的子序列中t出现的个数。
字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。
2.动态规划:
dp[i][j]表示以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。
class Solution {
public int numDistinct(String s, String t) {
int[][] dp = new int[s.length() + 1][t.length() + 1];
for (int i = 0; i < s.length() + 1; i++) {
dp[i][0] = 1;//相当于t为空串出现次数始终为1
}
for (int i = 1; i < s.length() + 1; i++) {
for (int j = 1; j < t.length() + 1; j++) {
if (s.charAt(i - 1) == t.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];//可以往前继续选择
else dp[i][j] = dp[i - 1][j];
}
}
return dp[s.length()][t.length()];
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)