940. 不同的子序列 II
给定一个字符串 s,计算 s 的 不同非空子序列 的个数。因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。
字符串的 子序列 是经由原字符串删除一些(也可能不删除)字符但不改变剩余字符相对位置的一个新字符串。
例如,"ace" 是 "abcde" 的一个子序列,但 "aec" 不是。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/distinct-subsequences-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Scanner;
class Solution {
private static final int MOD = 1000000007;
public static int distinctSubseqII(String s) {
if (s == null || s.length() == 0) {
return 0;
}
int all = 1;
int[] dp = new int[26];
for (int i = 0; i < s.length(); ++i) {
int newNum = (all - dp[s.charAt(i) - 'a'] + MOD) % MOD;
all = (all + newNum) % MOD;
dp[s.charAt(i) - 'a'] = (dp[s.charAt(i) - 'a'] + newNum) % MOD;
}
return all - 1;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
System.out.println(distinctSubseqII(in.next()));
}
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号