文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母。

你可以在 text 中任意位置插入 一个 字符,这个插入的字符必须是 pattern[0] 或者 pattern[1] 。注意,这个字符可以插入在 text 开头或者结尾的位置。

请你返回插入一个字符后,text 中最多包含多少个等于 pattern子序列

子序列 指的是将一个字符串删除若干个字符后(也可以不删除),剩余字符保持原本顺序得到的字符串。

示例 1:
输入:text = "abdcdbc", pattern = "ac"
输出:4
解释:
如果我们在 text[1] 和 text[2] 之间添加 pattern[0] = 'a' ,那么我们得到 "abadcdbc" 。那么 "ac" 作为子序列出现 4 次。
其他得到 4 个 "ac" 子序列的方案还有 "aabdcdbc" 和 "abdacdbc" 。
但是,"abdcadbc" ,"abdccdbc" 和 "abdcdbcc" 这些字符串虽然是可行的插入方案,但是只出现了 3 次 "ac" 子序列,所以不是最优解。
可以证明插入一个字符后,无法得到超过 4 个 "ac" 子序列。示例 2:
输入:text = "aabb", pattern = "ab"
输出:6
解释:
可以得到 6 个 "ab" 子序列的部分方案为 "aaabb" ,"aaabb" 和 "aabbb" 。提示:
1 <= text.length <= 10^5
pattern.length == 2
text 和 pattern 都只包含小写英文字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximize-number-of-subsequences-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 首先可以求出每个位置左侧的 0 字符、右侧的 1 字符个数
  • 接着求出不插入新字符的情况下有多少种子序列
  • 再求出插入一个新字符会增加多少个子序列,两者的和就是答案
class Solution {public:long long maximumSubsequenceCount(string text, string pattern) {int n = text.size(), delta = 0;long long ans = 0;vector<int> left0(n), right1(n);for(int i = 0; i < n; ++i)left0[i] = (i>0 ? left0[i-1] : 0) + (text[i]==pattern[0]);for(int i = n-1; i >= 0; --i)right1[i] = (i<n-1 ? right1[i+1] : 0) + (text[i]==pattern[1]);for(int i = 0; i < n; ++i){if(text[i] == pattern[1])ans += i>0 ? left0[i-1] : 0;//原有多少种子序列delta = max(delta, max(right1[i], left0[i]));// 增加字符后最大的可能}return ans+delta;}
};

76 ms 35.5 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2207. 字符串中最多数目的子字符串(前缀和)相关推荐

  1. R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串

    R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录

  2. python-又来练习题--输出一个字符串中最长的子字符串及其长度

    一.有个字符串 str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111' 包含特殊字符.数字和字母,输 ...

  3. VB:编一个子过程DeleStr(s1,s2),将字符串s1中出现的s2子字符串删去,结果存放在s1中

    题目来源:大工慕课 链接 原题:Visual Basic程序设计教程(第二版)龚沛曾主编,高等教育出版社 实验6-8 作者:Caleb Sung 题目要求 编一个子过程DeleStr(s1,s2),将 ...

  4. 【字符串】leet459.重复的子字符串(C/C++/Java/Python/Js)

    leetcode459.重复的子字符串 1 题目 2 思路 3 代码 3.1 C++版本 3.2 C版本 3.3 Java版本 3.4 Python版本 3.5 JavaScript版本 4 总结 K ...

  5. python删除字符串中重复字符_删除字符串中重复字符python 用CAD怎么画DNA反向

    用CAD怎么画DNA反向平行双螺旋结构绘螺旋线时,用选扭曲,确定顺时针. 画双头螺旋线时,第二根螺旋线底圆起点与第一根螺旋线底圆起点,可用角度分隔如180°.python去除文本中重复的字符串可有可无 ...

  6. R语言str_extract函数从字符串中抽取匹配模式的字符串

    R语言str_extract函数从字符串中抽取匹配模式的字符串 目录 R语言str_extract函数从字符串中抽取匹配模式的字符串 #导入包和库

  7. 字符串之替换字符串中连续出现的指定字符串

    题目: 字符串之替换字符串中连续出现的指定字符串 给定3个字符串str from to已知from字符串无重复字符,把str中所有from的子串全都替换成to字符串,连续出现from只需要换成一个to ...

  8. 删除字符串中指定的字符形成字符串

    //删除字符串中指定的字符形成字符串 #include <stdio.h> #include <string.h>void fun(char s[],int c) {int n ...

  9. excel取末尾数字_Excel公式技巧11: 从字符串中提取数字——数字位于字符串末尾...

    excelperfect 上篇文章讲解了提取位于字符串开头的数字的公式技术,本文研究从字符串开头提取数字的技术: 1. 这些数字是连续的 2. 这些连续的数字位于字符串的末尾 3. 想要的结果是将这些 ...

最新文章

  1. mysql数据库移植到另一台电脑,将mysql数据库从一台计算机复制到另一台计算机...
  2. 一种电子病历系统软件框架思想
  3. mysql和sql互导_Mysql和SqlServer互相转换
  4. python创建实例时显示没有参数-OSError无法创建文件无效参数
  5. BIO-NIO-AIO
  6. VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]
  7. 港科大陈凯、杨强教授新书重磅发布,系统揭秘隐私计算 | 文末送书
  8. Combotree--别样的构建层级json字符串
  9. mariab修改mysql端口_修改mysql/MariaDB数据库的端口号+远程
  10. mysql增量备份保留策略_Mysql备份策略-完成备份+增量备份shell
  11. mysql在哪里写代码_[译] 如何写好 Go 代码
  12. android intent包装,Android 中的 Intent
  13. 编程语言对比 主程序传参
  14. 电池测试系统连接服务器失败,服务器报电池故障
  15. SATA,SAS,SSD 读写性能测试结果
  16. 程序使用微软雅黑作为默认字体在xp下的问题
  17. 中国LVDT RVDT传感器市场现状研究分析与发展前景预测报告(2022)
  18. 新房装修选怎中式装修是不是能省钱
  19. php 微信小程序签到打卡,微信小程序实现打卡日历功能
  20. jacob.jar 操作word文件 添加水印、图片(附查阅Microsoft Office VBA参考文档方式)

热门文章

  1. dbc连接mysql_Spring WebFlux 使用 R2DBC 访问 MySQL
  2. 易语言神经网络验证码识别_递归神经网络 GRU+CTC+CNN 教会验证码识别
  3. rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式
  4. springboot springmvc mybatis_12道重点的Spring Boot面试题,帮你整理好了!
  5. java汉字转化accic_Java自主学习贴
  6. Vue-watch选项
  7. 十六进制转化为十进制
  8. 魔戒(思维+bfs)
  9. 2017模拟赛:还款计算
  10. 010. 使用.net框架提供的属性