【发布时间】:2014-09-15 04:16:03
【问题描述】:
大家好:有人可以向我解释一下这个算法是如何工作的吗?我无法理解机制。谢谢。
问题:给定一个字符串 S 和一个字符串 T,计算 S 中 T 的不同子序列的个数。
字符串的子序列是一个新的字符串,它是从原始字符串中删除一些(可以是无)字符而不干扰剩余字符的相对位置而形成的。 (即,“ACE”是“ABCDE”的子序列,而“AEC”不是)。
这是一个例子: S = “兔子”,T = “兔子”
返回 3。
解决方案:
public int numDistincts(String S, String T)
{
int[][] table = new int[S.length() + 1][T.length() + 1];
for (int i = 0; i < S.length(); i++)
table[i][0] = 1;
for (int i = 1; i <= S.length(); i++) {
for (int j = 1; j <= T.length(); j++) {
if (S.charAt(i - 1) == T.charAt(j - 1)) {
table[i][j] += table[i - 1][j] + table[i - 1][j - 1];
} else {
table[i][j] += table[i - 1][j];
}
}
}
return table[S.length()][T.length()];
}
【问题讨论】:
-
您可能会在 cs.stackexchange.com 或programmers.stackexchange.com 上得到更好的回应
-
用你的兔子例子试一试。