首页 > 其他分享 >940. 不同的子序列 II

940. 不同的子序列 II

时间:2022-10-14 18:00:45浏览次数:38  
标签:字符 int 位置 940 累加 II private 序列

动态规划:求子序列问题经常可以用动态规划,用f[i]表示以字符串s[i]字符为最后一个字符时一共有多少个不重复非空子序列,i为最后一个字符,那么只需要累加倒数第二个字符的位置就可以求出f[i],但这样算出来的结果是有重复值的,比如位置不同的相同字符算出来的值位置靠后算出来的子序列是包含位置靠前的子序列,那么在之后算某个字符的子序列数量时累加这两个值就会把重复的值累加,由此可以看出在求某个以该位置结尾的子序列时,如果倒数第二个字符相同时,我们只需要加位置靠后的数量即可,答案就是所有字母所在的最后一个位置的f[i]之和

code :


class Solution {
    private final int MOD = 1000000007 ;
    private int[] dp = new int[2010];
    private int [] site = new int[30];
    public int distinctSubseqII(String s) {
        Arrays.fill(site,-1);
        Arrays.fill(dp,0);
        for(int i = 0;i<s.length();i++){
            dp[i] = 1;
            for(int j = 0;j<26;j++){
                if(site[j] == -1)
                    continue;
                dp[i] = (dp[i]+dp[site[j]])%MOD;
            }
            site[s.charAt(i)-'a'] = i;
           
        }
        int ans = 0;
        for(int j= 0;j<26;j++){
            if(site[j] == -1)
                continue;
            ans = (ans+dp[site[j]])%MOD;
        }
        return ans;
    }
}

标签:字符,int,位置,940,累加,II,private,序列
From: https://www.cnblogs.com/loliconsk/p/16792485.html

相关文章

  • BAPI_GOODSMVT_CREATE 带序列号
     API_GOODSMVT_CREATE物料移动,比如MB1B'343'"unblock'344'"block参考代码*&BAPIDATA:goodsmvt_headerLIKEbapi2017_gm_head_01,goodsmvt_codeLIKE......
  • 337.house-robber-iii 打家劫舍III
    问题描述337.打家劫舍III解题思路严格来说,这一题和198.打家劫舍,213.打家劫舍II的思路并不一致。首先,这一道题遍历的是树,而不是一个数组。要比较的是选择目前节点和目前......
  • 213.house-robber-ii 打家劫舍II
    问题描述213.打家劫舍II解题思路参照198.打家劫舍,但是这里多了一个首尾不能同时选择的选项,因此可以考虑将数组分成两部分,一个包含[0,n-1),一个包含[1,n),分别对应dp0......
  • 122.best-time-to-buy-and-sell-stock-ii 买卖股票的最佳时机II
    问题描述122.买卖股票的最佳时机II解题思路本题的关键是要找dp的递推关系,分两种情况讨论:prices[i-1]不会被选择,那么dp[i]=dp[i-1],其实也说明,prices[i-1]<p......
  • 123.best-time-to-buy-and-sell-stock-iii 买卖股票的最佳时机III
    问题描述123.买卖股票的最佳时机III解题思路本题的关键在于找到dp的实际含义,以及它的递推关系;dp[i]表示只考虑前i天的情况,那么到了第i天,有五种可能的情况:没有做任......
  • C#处理扩展ASCII码
    接收到一组数据里面包含了内容为F8的数据节;一般的ASCII码最大值为7F。如果按照GB2312解析则会出现一个奇怪的中文字符鳦,猜测是因为中文解析方式发现某字节大于ASCII的限......
  • leetcode每日一题:940.不同的子序列Ⅱ
    题目描述给定一个字符串s,计算s的不同非空子序列的个数。因为结果可能很大,所以返回答案需要对10^9+7取余。字符串的子序列是经由原字符串删除一些(也可能不删除)字......
  • 940.不同的子序列 II
    解题思路:本题为动态规划思想基本思想:以结尾的字母来划分集合,避免重复的子序列。遍历字符串,更新以当前字符串结尾的子序列数量为:以26个字母为结尾的子序列的数量(就是......
  • IIS 绿盟检测到HOST头攻击漏洞的解决: web应用使用SERVER_NAME而非host header。
    https://blog.csdn.net/fightingintherain/article/details/1256648851、漏洞描述2、修复方案(IIS服务端) 1)下载安装url重写工具(官网URLRewrite:TheOfficialMic......
  • 【算法训练营day2】LeetCode977. 有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵
    【算法训练营day2】LeetCode977.有序数组的平方209.长度最小的子数组59.螺旋矩阵IILeetCode977.有序数组的平方题目链接:977.有序数组的平方初次尝试上来看到建......