Distinct Subsequences
Q:
A:
仍然是dp的思想,定义A[i][j]为T的前i + 1个字符和S的前j + 1个字符的Distinct Subsequences的个数,则有
S[i] == T[j]: A[i][j] = A[i][j - 1] + A[i - 1][j - 1]
S[i] != T[j]: A[i][j] = A[i - 1][j - 1]
OK
class Solution { public: int numDistinct(string S, string T) { // Start typing your C/C++ solution below // DO NOT write int main() function /* A[i][j] = A[i][j - 1] + A[i - 1][j - 1] A[i][j - 1] */ int len_s = S.length(); int len_t = T.length(); if (S.empty() || T.empty()) return 0; vector<int> nums; nums.resize(len_s); nums[0] = T[0] == S[0] ? 1 : 0; for (int i = 1; i < len_s; ++i) { if (T[0] == S[i]) { nums[i] = nums[i - 1] + 1; } else { nums[i] = nums[i - 1]; } } for (int i = 1; i < len_t; ++i) { int pre = nums[0]; nums[0] = 0; for (int j = 1; j < len_s; ++j) { int tmp = nums[j]; if (j < i) { nums[j] = 0; pre = tmp; continue; } if (S[j] == T[i]) { nums[j] = pre + nums[j - 1]; } else { nums[j] = nums[j - 1]; } pre = tmp; } } return nums.back(); } };
Passion, patience, perseverance, keep it and move on.

浙公网安备 33010602011771号