class Solution {
private :
static constexpr long max = 1000000007;
public:
int countPalindromicSubsequences(string S) {
int size = S.size();
vector<vector<int>> dp(size, vector<int>(size, 0));
for (int i = 0; i < size; ++i) dp[i][i] = 1;
for (int len = 2; len <= size; ++len) {
for (int i = 0; i + len - 1 < size; ++i) {
int j = i + len - 1;
if (S[i] == S[j]) {
int m = i + 1, n = j - 1;
while (m <= n && S[m] != S[i]) ++m;
while (m <= n && S[n] != S[i]) --n;
if (m == n)
dp[i][j] = 2 * dp[i + 1][j - 1] + 1;
else if (m > n)
dp[i][j] = 2 * dp[i + 1][j - 1] + 2;
else
dp[i][j] = 2 * dp[i + 1][j - 1] - dp[m + 1][n - 1];
} else {
dp[i][j] = dp[i][j - 1] + dp[i + 1][j] - dp[i + 1][j - 1];
}
dp[i][j] = (dp[i][j] + max) % max;
}
}
return dp[0][size - 1];
}
};
730. Count Different Palindromic Subsequences
最新推荐文章于 2021-07-16 03:22:02 发布