题目链接

https://leetcode-cn.com/problems/distinct-subsequences-ii/

题意:

给定一个字符串,判断里面不相同的子串的总个数

思路:

非常巧妙的一个题:

以"abc"为例:不同的子序列有:{a,b,c,ab,ac,bc,abc}

朴素解法:O(2^N)

优化解法:动态规划+字符串hash O(26*N)

设dp[i]表示以'a'+i结尾的字符所含有的不同的子序列的个数

那么根据s[i-1]的情况,最多也就26种可能的情况,即dp[i]<--dp[0]+dp[1]+...+dp[25]+1; //最后加1表示前面的所有可能值都为空的字符串

极大的优化了时间复杂度

class Solution {
public:
//朴素解法时间复杂度 O(N^2)<==假算法,不连续,朴素解法应该是O(2^N)
//字符串hash O(26*N)
const int Mod=1e9+7;
int distinctSubseqII(string S) {
int dp[26]={0};//以i+'a'结尾的不同字符串的总数
int ans=0;
for(char c:S){
int tmp=0;
for(int i=0;i<26;i++){
tmp=(tmp+dp[i])%Mod;
}
dp[c-'a']=(1+tmp)%Mod;//空了一个子序列
} for(int i=0;i<26;i++){
ans=(ans+dp[i])%Mod;
} return ans;
}
};

参考思路:

https://leetcode-cn.com/problems/distinct-subsequences-ii/solution/dong-tai-gui-hua-cong-fen-xi-dao-shi-xian-by-my10y/

leetcode 940. 不同的子序列 II (动态规划 ,字符串, hash,好题)的更多相关文章

  1. hdu 4622 Reincarnation 字符串hash 模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有不超过1e5次的区间查询,输出每次查询区间中不同 ...

  2. HDU 1880 字符串hash 入门题

    Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔 ...

  3. 杭电oj1860:统计字符(字符串hash / 水题)

    统计字符 题目链接 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem D ...

  4. hdu-4080 Stammering Aliens 字符串hash 模板题

    http://acm.hdu.edu.cn/showproblem.php?pid=4080 求出现次数大于等于n的最长串. #include<iostream> #include< ...

  5. Bazinga 字符串HASH 这题不能裸HASH 要优化 毒瘤题

    Ladies and gentlemen, please sit up straight. Don't tilt your head. I'm serious. For nn given string ...

  6. Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)

    Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ...

  7. CJOJ 2044 【一本通】最长公共子序列(动态规划)

    CJOJ 2044 [一本通]最长公共子序列(动态规划) Description 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X,则另一序列Z是X的子序列是指存在一个 ...

  8. 子序列 sub sequence问题,例:最长公共子序列,[LeetCode] Distinct Subsequences(求子序列个数)

    引言 子序列和子字符串或者连续子集的不同之处在于,子序列不需要是原序列上连续的值. 对于子序列的题目,大多数需要用到DP的思想,因此,状态转移是关键. 这里摘录两个常见子序列问题及其解法. 例题1, ...

  9. Leetcode 115.不同的子序列

    不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例 ...

随机推荐

  1. 精尽Spring MVC源码分析 - HandlerMapping 组件(一)之 AbstractHandlerMapping

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  2. 用 Roslyn 做个 JIT 的 AOP

    0. 前言 上接:AOP有几种实现方式 接下来说说怎么做AOP的demo,先用csharp 说下动态编织和静态编织,有时间再说点java的对应内容. 第一篇先说Roslyn 怎么做个JIT的AOP d ...

  3. 2020年下征文+没有计算机经验的宝妈也可以轻松领证一次过关啦 nice !相信努力总会收获

    2020年下征文+没有计算机经验的宝妈也可以轻松领证http://www.1634.com.cn/ruankao/forum.php?mod=viewthread&tid=5363&f ...

  4. 嵌入式开发笔记——调试组件SEGGER_RTT

    一.前言 在嵌入式开发过程中,经常会通过打印输出一些调试信息来调试参数.查找问题等,通常我的做法都是使用芯片的串口硬件设备配合串口助手软件来进行调试.但是这次项目的PCB硬件设计并未预留串口调试接口, ...

  5. 某毒霸网站存在信息泄露和sql注入

    通过钟馗之眼搜索目标网站的证书使用者找到信息泄露的网站, 点击上图中的edit会跳转 手工注入sql发现有效 that's all

  6. GitBook简单的使用

    GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书. 使用 GitBook 管 ...

  7. 每天学习一点ES6(二)let 和 const

    let 命令 let 和 var 差不多,只是限制了有效范围. 先定义后使用 不管是什么编程语言,不管语法是否允许,都要秉承先定义,然后再使用的习惯,这样不会出幺蛾子.以前JavaScript比较随意 ...

  8. MySQL建立索引遵循原则的注意点

    1.选择唯一性索引 唯一性索引的数据是唯一的,可以更快的通过该索引查询某条数据. 2.为经常需要排序,分组和联合操作的字段建立索引 order by,group by的字段在排序操作时很是耗时,可以对 ...

  9. Java学习日报7.31

    package bank;import java.util.*;public class Bank { private Scanner sc=new Scanner(System.in); priva ...

  10. 容器编排系统K8s之访问控制--准入控制

    前文我们聊到了k8s的访问控制第二关RBAC授权插件的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14216634.html:今天我们来聊一下k8 ...