当前位置: 首页 > news >正文

LeetCode 940. 不同的子序列 II

使用递归将导致超时。
通过分析可以知道


例:对于字符串"ab"有子序列"a""b""ab",当出现一个新的元素c,也就是字符串变成"abc"的时候,相较于字符串"ab",子序列多出了"ac""bc""c",此时字符串"abc"的子序列为 "a""b""ab""ac""bc""abc""c",一共为7个。

不难看出当新的元素出现的时候,会把之前子序列("a""b""ab")加上这个新元素(c)形成新的子序列("ac""bc""abc"),再与原有的子序列("a""b""ab")并加单独这个元素构成的子序列("c")构成新的子序列合集("a""b""ab""ac""bc""abc""c"一共7个子序列),此时序列数等于之前序列数的两倍 + 1

但是如果出现的元素不是新的元素,而是在之前出现过的元素的时候,例如对于字符串"abc",当再一个元素为c的时候,即字符串为"abcc"时,原有子序列为"a""b""ab""ac""bc""c",此时会发现对于原有子序列中有一部分("a""b""ab")在之前c元素上一次出现的时候已经与元素c形成了子序列("ac""bc"),因此为避免重复此时出现的元素"c"不能与之前出现时已有的子序列("a""b""ab")形成新的子序列,只能和之后的子序列("ac""bc""abc""c")组成新的子序列("acc""bcc""abcc""cc"),此时子序列为("a""b""ab""ac""bc""abc""c""acc""bcc""abcc""cc"一共11个子序列),此时的子序列 = 现有序列数 + (现有序列数 - 上一次元素出现时的子序列数)


class Solution {
public:
    int distinctSubseqII(string s) {
        int res = 0;
        int dir[26];
        for(int i = 0; i < 26; i++)
            dir[i] = -1;
        for(int i = 0; i < s.size(); i++)
        {
            if(dir[s[i] - 'a'] == -1)
            {
                dir[s[i] - 'a'] = res;
                res = ((res * 2) % 1000000007 + 1) % 1000000007;
            }
            else
            {
                int temp = dir[s[i] - 'a'];
                dir[s[i] - 'a'] = res;
                res = ((res * 2) % 1000000007 - temp) % 1000000007;
            }
        }
        if(res < 0)
            res = res + 1000000007;
        return res;
    }
};

相关文章:

  • 【VUE基础】webpack
  • 【漏洞复现-discuz-wooyun-命令执行】vulfocus/discuz-wooyun_2010_080723
  • SDWAN和MPLS谁才是最佳选择
  • 记一次失败的使用python selenium刷课学习通脚本(细节满满)+关于使用selenium的疑难杂症解决+json数据请求的疑难杂症+py冷门知识
  • Mybatis架构,SqlSessionFactory源码分析
  • 我终于读懂了设计模式的七大原则。。。
  • stm32f4xx-SPI
  • 高数(下) 第十二章:无穷级数
  • LeetCode·每日一题·940.不同的子序列 || · 动态规划
  • 【云原生】Elasticsearch + kibana on k8s 讲解与实战操作
  • 神经网络过拟合什么意思,神经网络中解决过拟合
  • win11toast:python桌面通知工具
  • 【cloud Alibaba】(四)分布式事务处理——Seata
  • [算法入门笔记] 19. 有序表
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • Java反射小练之手写BeanUtils的copyProperties(Upgrade)
  • 软件测试过程:单元测试,集成测试,系统测试,验收测试,回归测试
  • 入门力扣自学笔记177 C++ (题目编号:769)
  • QT中QThread的各个方法,UI线程关系,事件关系详解(5)
  • 深度学习:LeNet-5实现服装分类(PyTorch)