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

leetcode日记(99)不同的子序列

挺难的TT一开始居然把动态规划转移方程写错了,导致后面怎么改都通不过……

找转移方程真是件难事啊……

方法是照常建立动态规划数组,nums[i][j]代表s的前i含多少个t的前j,这个比较容易想。

转移方程还是有点难度的,每次遍历一个t[j]就有两种情况,一种是t[j]和s[i]相同,一种是不同,而相同又有两种情况,一种是匹配一种是跳过t[j]不匹配,如果跳过那就和t[j]不等于s[j]一样,直接就取nums[i][j-1],如果匹配那就是nums[i-1][j-1],所以t[j]和s[i]相同的情况下nums[i][j]=nums[i-1][j-1]+nums[i][j-1]。

一开始想的太复杂了,其实只要从最简单的i为0起手就行,i为0时任何j都能匹配所以一整行都是1,然后慢慢往下循环。

这是第一版代码:

class Solution {
public:
    unsigned long int nums[1001][1001];
    int numDistinct(string s, string t) {
        memset(nums,0,sizeof(nums));
        for(int i=0;i<=s.size();i++) nums[i][0]=1;
        for(int i=1;i<=s.size();i++){
            for(int j=1;j<=t.size();j++){
                if(s[i-1]==t[j-1]) nums[i][j]=nums[i-1][j-1]+nums[i-1][j];
                else nums[i][j]=nums[i-1][j];
            }
        }
        return nums[s.size()][t.size()];
    }
};

消耗内存还是太多了,其实想到可以简化空间复杂度,只需要一个一维数组记录就行,若不相等则不变,若相等则加上前一个数。

class Solution {
public:
    unsigned long int nums[1001];
    int numDistinct(string s, string t) {
        memset(nums,0,sizeof(nums));
        nums[0]=1;
        for(int i=1;i<=s.size();i++){
            for(int j=t.size();j>=1;j--){
                if(s[i-1]==t[j-1]) nums[j]=nums[j-1]+nums[j];
            }
        }
        return nums[t.size()];
    }
};

简化了很多,需要注意t要从后往前匹配,因为不能影响到后面的数值。

相关文章:

  • 感受命令行界面的魅力——Linux环境下基础开发工具的使用
  • Leetcode-132.Palindrome Partitioning II [C++][Java]
  • 如何在PyCharm中利用Python对象自动提示提高开发效率?
  • 数学建模 第二节
  • 删除二叉搜索树中的节点
  • 第五章-动态规划
  • 实践 PyTorch 手写数字识别
  • 机试准备第17天
  • Suno的对手Luno:AI音乐开发「上传参考音频 - 方式一:通过二进制流的方式」 —— 「Luno Api系列|AI音乐API」第11篇
  • 【NLP 38、实践 ⑩ NER 命名实体识别任务 Bert 实现】
  • Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南
  • Springboot中的 Mapper 无法找到的 可能原因及解决方案
  • 一个简单的井字棋(Tic-Tac-Toe)游戏的C语言实现
  • 程序化广告行业(20/89):交易模式深度剖析与价值解读
  • 基于51单片机的多功能时钟闹钟proteus仿真
  • 前端内存优化实战指南:从内存泄漏到性能巅峰
  • IMX6ULL_Pro开发板的串口应用程序实例(利用TTY子系统去使用串口)
  • 蓝桥杯[阶段总结] 二分,前缀和
  • C语言动态内存管理(上)
  • Compose 实践与探索十二 —— 附带效应
  • 网红街区如厕难,如何多管齐下补缺口?
  • 中国科协发声:屡禁不止的奇葩论文再次敲响学风建设警钟
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任
  • 国博馆刊|北朝至唐初夏州酋豪李氏家族的发展与身份记忆
  • 顾家家居:拟定增募资近20亿元,用于家居产品生产线的改造和扩建等