940. Distinct Subsequences II
Поскольку ответ может быть очень большим, верните его по модулю 10^9 + 7. Подпоследовательность строки - это новая строка, которая образуется из исходной строки путем удаления некоторых (можно ни одного) символов без нарушения взаимного расположения оставшихся символов. (Например, "ace" является подпоследовательностью "abcde", а "aec" - нет.
Пример:
Input: s = "abc"
Output: 7
C# решение
сопоставлено/оригиналpublic class Solution {
private const int MOD = 1000000007;
public int CountSubsequences(string s) {
int[] dp = new int[26];
foreach (char c in s) {
int index = c - 'a';
dp[index] = (dp.Sum() + 1) % MOD;
}
return dp.Sum() % MOD;
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
private const int MOD = 1000000007;
public int CountSubsequences(string s) {
vector<int>& dp = new int[26];
foreach (char c in s) {
int index = c - 'a';
dp[index] = (dp.Sum() + 1) % MOD;
}
return dp.Sum() % MOD;
}
}
Java решение
сопоставлено/оригиналclass Solution {
private static final int MOD = 1000000007;
public int countSubsequences(String s) {
int[] dp = new int[26];
for (char c : s.toCharArray()) {
int index = c - 'a';
dp[index] = (int)(((long)sum(dp) + 1) % MOD);
}
return sum(dp);
}
private int sum(int[] dp) {
int result = 0;
for (int val : dp) {
result = (result + val) % MOD;
}
return result;
}
}
Python решение
сопоставлено/оригиналMOD = 10**9 + 7
def countSubsequences(s):
dp = [0] * 26
for c in s:
index = ord(c) - ord('a')
dp[index] = (sum(dp) + 1) % MOD
return sum(dp) % MOD
Go решение
сопоставлено/оригиналpackage main
const MOD = 1000000007
func countSubsequences(s string) int {
dp := make([]int, 26)
for _, c := range s {
index := c - 'a'
sum := 0
for _, val := range dp {
sum = (sum + val) % MOD
}
dp[index] = (sum + 1) % MOD
}
result := 0
for _, val := range dp {
result = (result + val) % MOD
}
return result
}
Algorithm
Определить матрицу DP, где dp[i][j] будет хранить количество подпоследовательностей строки s с длиной i, оканчивающихся символом j.
Инициализировать матрицу DP нулями.
Пройти по каждому символу строки:
Если символ еще не был встречен, все подпоследовательности до текущего символа + текущий символ.
Если символ уже был встречен, учет всех подпоследовательностей, включающих текущий символ, с учетом предыдущих вхождений.
Вернуть сумму всех значений в DP по модулю 10^9 + 7.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.