题目链接

题意,给一个字符串,求子序列“cwbc”出现的次数

分析:

dp,滚动数组

令 f[i][j],(j = 1,2,3,4) 表示前 i 个字符中,匹配了字符串”cwbc” 的前多少位,那么有转移方程:

f[i][1] = (f[i−1][1] + (s[i] ==′ c′)) % Mod

f[i][2] = (f[i−1][2] + (s[i] ==′ w′)∗f[i−1][1]) % Mod

f[i][3] = (f[i−1][3] + (s[i] ==′ b′)∗f[i−1][2]) % Mod

f[i][4] = (f[i−1][4] + (s[i] ==′ c′)∗f[i−1][3]) % Mod

内存超标。使用滚动数组优化开销:

f[1] = (f[1] + (s[i] ==′ c′)) % Mod

f[2] = (f[2] + (s[i] ==′ w′)∗f[1]) % Mod

f[3] = (f[3] + (s[i] ==′ b′)∗f[2]) % Mod

f[4] = (f[4] + (s[i] ==′ c′)∗f[3]) % Mod
代码中动规的第二维正着来反着来都没区别,因为互有关联的21,32,43都是二者只可能有一个执行的,而14虽然都有可能执行,但互不影响

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int inf=1<<30;
 4 typedef long long ll;
 5 const double pi=acos(-1);
 6 const int mod=2000120420010122;
 7 const int maxn=2e5+7;
 8 ll dp[5];
 9 int main(){
10     string s;
11     while(cin>>s){
12     memset(dp,0,sizeof(dp));
13     for(int i=0;i<s.length();i++){
14         s[i]=tolower(s[i]);
15             dp[4]=(dp[4]+(s[i]=='c')*dp[3])%mod;
16             dp[3]=(dp[3]+(s[i]=='b')*dp[2])%mod;
17             dp[2]=(dp[2]+(s[i]=='w')*dp[1])%mod;
18             dp[1]=(dp[1]+(s[i]=='c'))%mod;
19     }
20     cout<<dp[4]<<endl;
21     }
22     return 0;
23 }

转载于:https://www.cnblogs.com/qingjiuling/p/10429032.html

字符串中子序列出现次数相关推荐

  1. Python学习笔记D4(字符串和序列)

    Python学习笔记D4(字符串和序列) 序列 list()作为一个方法存在两个形态,一个有参数一个没参数 list():不带参数,返回一个空的列表 list([iterable]):返回一个迭代器 ...

  2. 编写程序,统计一个长度为2的字符串在另一个字符串中出现的次数

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p137 习题5 4.统计一个长度为2的字符串在另一个字符串中出现的次数.例如,假定输入的字符串为:as ...

  3. 求一个字符串中连续出现次数最多的子串

    http://blog.csdn.net/imcdragon/article/details/6838565解答二 http://hi.baidu.com/icyday315/item/040aada ...

  4. python统计字符在文件中出现的次数_python字符串中字符出现次数(python获取字符串个数)...

    今天要说的是Python的字符串函数还是很方便的,只需要调用 count() 方法即可. 最近,我在一个网站上看到了一个自然语言处理课程.我详细解释了一些方法的使用,用例很容易理解,所以我想通过我的博 ...

  5. String案例 获取一个字符串在另一个字符串中出现的次数(两种方法)

    /*思路:定义1个计数器和1个截取后的Str-->判断有无SS-->有就截取并计数-->直到截取完没有ss就停止*/ package Day12;/* 练习2 获取一个字符串在另一个 ...

  6. C语言试题四十八之该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。

    1. 题目 请编写一个函数function,它的功能是:该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C ...

  7. 2027. 转换字符串的最少操作次数

    2027. 转换字符串的最少操作次数 给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' . 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 'O ...

  8. 统计一个字符在另一个字符串中出现的次数

    文章目录 1.一个字符在另一个字符串中出现的次数 2.测试 3.输出 1.一个字符在另一个字符串中出现的次数 /*** showTime 懂得都懂 <br>* @param findStr ...

  9. 字符串查找字符出现次数_查找字符串作为子序列出现的次数

    字符串查找字符出现次数 Description: 描述: It's a popular interview question based of dynamic programming which ha ...

最新文章

  1. 如此通俗的分布式锁讲解,如果还搞不定那就...
  2. gdb coredump
  3. c 普通的文本变成注释文本的快捷键_IntelliJ Idea 常用快捷键列表 (2019年总结)
  4. 修改Transformer结构,设计一个更快更好的MLM模型
  5. Java Word break analysis
  6. jsonview浏览器插件 查看格式化json数据
  7. kali Linux 没有ip解决办法
  8. html5中关于input使用方法的改变
  9. 高数:自然数的无穷大符号--->n_max(高等数学的唯一根基所在)
  10. php word 生成图片,PHP导出成word,带图片样式
  11. BERT模型深度解析
  12. java jive歌词翻译_Java Jive歌词 Java JiveLrc歌词
  13. 5118站长工具箱:SEO数据分析浏览器插件 - 叶涛的博客
  14. 机顶盒ttl无法输入_连接TTL线后无法输入代码、不跑码乱码的解决方法
  15. ROS1云课→29如何借助导航实现走迷宫机器人
  16. C语言中的Sleep函数
  17. Spring入门第一讲——Spring框架的快速入门
  18. linux环境nginx从下载到安装
  19. App开发中适用的短信SDK
  20. vue-quill-editor图片缩放处理

热门文章

  1. Java二进制位运算、移位运算、、
  2. jQuery基础知识准备
  3. 完整java开发中JDBC连接数据库代码和步骤
  4. Filemanager 的使用
  5. CentOS下挂载硬盘(fdisk,mkfs.ext4,mount)
  6. NYOJ 45 棋盘覆盖
  7. 转 常见hash算法的原理
  8. 转:PHP Liunx 服务安全防范方案
  9. EasyUI权限系统
  10. 如何 提高企业网站大数据量 效率