LeetCode 2207. 字符串中最多数目的子字符串(前缀和)
文章目录
- 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. 字符串中最多数目的子字符串(前缀和)相关推荐
- R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串
R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录
- python-又来练习题--输出一个字符串中最长的子字符串及其长度
一.有个字符串 str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111' 包含特殊字符.数字和字母,输 ...
- VB:编一个子过程DeleStr(s1,s2),将字符串s1中出现的s2子字符串删去,结果存放在s1中
题目来源:大工慕课 链接 原题:Visual Basic程序设计教程(第二版)龚沛曾主编,高等教育出版社 实验6-8 作者:Caleb Sung 题目要求 编一个子过程DeleStr(s1,s2),将 ...
- 【字符串】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 ...
- python删除字符串中重复字符_删除字符串中重复字符python 用CAD怎么画DNA反向
用CAD怎么画DNA反向平行双螺旋结构绘螺旋线时,用选扭曲,确定顺时针. 画双头螺旋线时,第二根螺旋线底圆起点与第一根螺旋线底圆起点,可用角度分隔如180°.python去除文本中重复的字符串可有可无 ...
- R语言str_extract函数从字符串中抽取匹配模式的字符串
R语言str_extract函数从字符串中抽取匹配模式的字符串 目录 R语言str_extract函数从字符串中抽取匹配模式的字符串 #导入包和库
- 字符串之替换字符串中连续出现的指定字符串
题目: 字符串之替换字符串中连续出现的指定字符串 给定3个字符串str from to已知from字符串无重复字符,把str中所有from的子串全都替换成to字符串,连续出现from只需要换成一个to ...
- 删除字符串中指定的字符形成字符串
//删除字符串中指定的字符形成字符串 #include <stdio.h> #include <string.h>void fun(char s[],int c) {int n ...
- excel取末尾数字_Excel公式技巧11: 从字符串中提取数字——数字位于字符串末尾...
excelperfect 上篇文章讲解了提取位于字符串开头的数字的公式技术,本文研究从字符串开头提取数字的技术: 1. 这些数字是连续的 2. 这些连续的数字位于字符串的末尾 3. 想要的结果是将这些 ...
最新文章
- mysql数据库移植到另一台电脑,将mysql数据库从一台计算机复制到另一台计算机...
- 一种电子病历系统软件框架思想
- mysql和sql互导_Mysql和SqlServer互相转换
- python创建实例时显示没有参数-OSError无法创建文件无效参数
- BIO-NIO-AIO
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]
- 港科大陈凯、杨强教授新书重磅发布,系统揭秘隐私计算 | 文末送书
- Combotree--别样的构建层级json字符串
- mariab修改mysql端口_修改mysql/MariaDB数据库的端口号+远程
- mysql增量备份保留策略_Mysql备份策略-完成备份+增量备份shell
- mysql在哪里写代码_[译] 如何写好 Go 代码
- android intent包装,Android 中的 Intent
- 编程语言对比 主程序传参
- 电池测试系统连接服务器失败,服务器报电池故障
- SATA,SAS,SSD 读写性能测试结果
- 程序使用微软雅黑作为默认字体在xp下的问题
- 中国LVDT RVDT传感器市场现状研究分析与发展前景预测报告(2022)
- 新房装修选怎中式装修是不是能省钱
- php 微信小程序签到打卡,微信小程序实现打卡日历功能
- jacob.jar 操作word文件 添加水印、图片(附查阅Microsoft Office VBA参考文档方式)
热门文章
- dbc连接mysql_Spring WebFlux 使用 R2DBC 访问 MySQL
- 易语言神经网络验证码识别_递归神经网络 GRU+CTC+CNN 教会验证码识别
- rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式
- springboot springmvc mybatis_12道重点的Spring Boot面试题,帮你整理好了!
- java汉字转化accic_Java自主学习贴
- Vue-watch选项
- 十六进制转化为十进制
- 魔戒(思维+bfs)
- 2017模拟赛:还款计算
- 010. 使用.net框架提供的属性