LeetCode 2645.构造有效字符串的最少插入数:O(n) + O(1)

【LetMeFly】2645.构造有效字符串的最少插入数:O(n) + O(1)

力扣题目链接:https://leetcode.cn/problems/minimum-additions-to-make-valid-string/

给你一个字符串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母数。

如果字符串可以由 "abc" 串联多次得到,则认为该字符串 有效

 

示例 1:

输入:word = "b"
输出:2
解释:在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc" 。

示例 2:

输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" 。

示例 3:

输入:word = "abc"
输出:0
解释:word 已经是有效字符串,不需要进行修改。 

 

提示:

  • 1 <= word.length <= 50
  • word 仅由字母 "a"、"b" 和 "c" 组成。

方法一:if-else

从前到后遍历字符串,并补充最少的字符使所有字符都变成abc

  • 如果当前字符为a
    • 如果附近字符格式为axx,则ans += 2a后插入bc
    • 如果附近字符格式为abx,则ans++; i++;ab后插入c
    • 如果附近字符格式为abc,则i += 2
    • 如果附近字符格式为ac,则ans++; i++;ac中插入b
  • 如果当前字符为b
    • 如果附近字符格式为xbx,则ans += 2;b前后插入ac
    • 如果附近字符格式为xbc,则ans++; i++;b前插入a
  • 如果当前字符为c
    • 附近字符格式只能为xxc,则ans += 2c前插入ab

最终返回ans即为答案。

  • 时间复杂度 O ( l e n ( w o r d ) ) O(len(word)) O(len(word))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:int addMinimum(string word) {int ans = 0;for (int i = 0; i < word.size(); i++) {if (word[i] == 'a') {  // axx abx abc acif (i + 2 < word.size() && word[i + 1] == 'b' && word[i + 2] == 'c') {  // abci += 2;}else if (i + 1 < word.size() && word[i + 1] == 'c') {  // aci++;ans++;}else if (i + 1 < word.size() && word[i + 1] == 'b') {  // abxi++;ans++;}else {  // axxans += 2;}}else if (word[i] == 'b') {  // xbx xbcif (i + 1 < word.size() && word[i + 1] == 'c') {  // xbci++;ans++;}else {  // xbxans += 2;}}else {  // xxcans += 2;}}return ans;}
};

方法二:算最终是几个abc

有童鞋说这道题只有三个字符,如果有10个字符(abcdefghij)那得写多少if-else。

没办法了,换个更容易实现的方法吧。

不难发现,目标字符串abc是递增的,只要连续两个字符是递增的,那么它们必定可以划到一个abc中。(若连续两字符为abacbc,那么他们最终会在一个abc中)。

否则(第二个字符≤第一个字符),相邻两个字符只能处在两个abc中。

因此,我们只需要遍历以便字符串,看相邻两个字符中第二个字符≤第一个字符的个数,就能知道最终有多少个abc

最终abc的个数乘3减去现有字符串长度即为要添加的字符的个数。

  • 时间复杂度 O ( l e n ( w o r d ) ) O(len(word)) O(len(word))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:int addMinimum(string word) {int cntABC = 1;for (int i = 1; i < word.size(); i++) {if (word[i] <= word[i - 1]) {cntABC++;}}return cntABC * 3 - word.size();}
};
Python
class Solution:def addMinimum(self, word: str) -> int:cntABC = 1for i in range(1, len(word)):if word[i] <= word[i - 1]:cntABC += 1return cntABC * 3 - len(word)

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/135531917

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之多线程分工模式---Worker Thread模式

系列文章目录 设计模式之避免共享的设计模式Immutability&#xff08;不变性&#xff09;模式 设计模式之并发特定场景下的设计模式 Two-phase Termination&#xff08;两阶段终止&#xff09;模式 设计模式之避免共享的设计模式Copy-on-Write模式 设计模式之避免共享的设计模…

Javascript 地狱级的if else / switch case该如何优化?

目录 问题 一、7大策略优化 1.单个if语句优化 2.if/else语句优化 3.多条件判断 4.多个 if else 嵌套优化策略 问题场景 如何优化 1.使用卫语句 2. try catch优化 3. 可选链 optional chaining 5.Map优化 场景实战 6.策略模式优化 7.复杂二维数组策略模式 …

CycleGAN(Cycle-Consistent Generative Adversarial Network)

CycleGAN&#xff08;Cycle-Consistent Generative Adversarial Network&#xff09;是一种用于图像到图像转换的深度学习模型。其主要目标是学习两个域之间的映射&#xff0c;例如将马的图像转换为斑马的图像&#xff0c;而无需配对的训练数据。以下是CycleGAN图像到图像转换的…

简单易用的快速原型软件终于被我找到了!

在产品开发过程中&#xff0c;原型设计是一个非常重要的环节&#xff0c;它不仅有助于团队之间的合作和沟通&#xff0c;而且是产品是否符合用户体验的关键。在本文中&#xff0c;我们将推荐一些有用的原型设计工具 即时设计 即时设计是一种在线原型设计工具。你可以用它在线…

UITextField设置

UITextField设置 //初始化textfield并设置位置及大小UITextField *text [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];//设置边框样式&#xff0c;只有设置了才会显示边框样式 text.borderStyle UITextBorderStyleRoundedRect;typedef enum {UITextBord…

基于云平台技术的XCALL的浅谈

基于云平台技术的XCALL&#xff08;eXpandable Call&#xff09;创新主要体现在以下几个方面&#xff1a; 可扩展性&#xff1a;XCALL利用云平台的可扩展性&#xff0c;能够处理大量并发通话&#xff0c;满足各种规模的业务需求。随着用户数量的增长&#xff0c;云平台可以动态…

RPA与通知机器人的完美结合

写在前面 在现代快节奏的工作环境中&#xff0c;我们经常会面临多个任务同时进行的情况&#xff0c;你还在为时间不够用、忙碌而惆怅吗&#xff1f;你还在为时刻盯着电脑流程而烦恼吗&#xff1f;你还在为及时收不到自己的自动化任务进度而焦躁吗&#xff1f;别担心&#xff0…

目标检测数据集 - 行人检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;行人检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如校园行人、街景行人、道路行人、遮挡行人、严重遮挡行人数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控场景下行人检测项目&#xff0c;以及作为…

中国关心下一代工作委员会健康体育发展中心美育舞蹈考官一王雪

王雪—— 《中国关心下一代工作委员会》健康体育发展中心、美育舞蹈考官、评委 北京舞蹈学院舞蹈编导 朝阳区小红门地区文化艺术-领头人 中国舞舞蹈家协会会员 2019年7月7日中国观网第六届京津冀淑女 2021年辅导学生登上央视春晚 《听我说》 2023年4月22日带学生参加万人…

Vue 3,element table表格动态添加

el-table实现表格动态新增/插入/删除表格行&#xff0c;可编辑单元格 效果图 代码实现 <template><el-table :data"formDate.scoreList4" style"width:100%;height: 96%;" stripe show-summary:summary-method"calculateSummary":he…

【2023年收入最高的10种编程语言】

在过去的一年时间里&#xff08;2022 年 10 月 1 日到 2023 年 10 月 1 日&#xff09; &#xff0c;DevJobsScanner 分析了来自世界各地的超过 1000 万份开发工作机会&#xff0c;以了解市场以及最热门、薪酬最高的编程语言。值得注意的是&#xff0c;本项研究只关注了来自美国…

面试 React 框架八股文十问十答第九期

面试 React 框架八股文十问十答第九期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;Redux 中异步的请求怎…

通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory

如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象&#xff0c;向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多&#xff0c;我们就需要new很多新的对象。这…

2024年第10届计算与人工智能国际会议(ICCAI 2024)即将召开

时间&#xff1a;2024年4月26-29日 地点&#xff1a;印度尼西亚巴厘岛 会议官网&#xff1a;ICCAI 2024|Bali, Indonesiahttps://www.iccai.net/index.html 2024年第十届计算与人工智能国际会议&#xff08;ICCAI 2024&#xff09;将于2024年4月26-29日在印度尼西亚巴厘岛举行…

推荐一款实用的免费开源局域网传输工具!轻松搭建网盘的神器!

本文小编给大家分享一款免费开源软件 Filebrowser&#xff0c;使用它可以轻松搭建属于你的个人网盘和网页版文件管理器。 它能做什么呢&#xff1f;想必大家也都用过百度网盘或阿里云盘之类的云存储服务&#xff0c;将自己的所有数据都存储在别人的服务器上&#xff0c;所谓的在…

【开源】基于JAVA的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

【Docker】部署 copilot-gpt4-service,将 Github Copilot 转换为 GPT-4 模型进行对话。

引言 利用 copilot-gpt4-service 服务&#xff0c;将 Github Copilot 转换为 ChatGPT&#xff0c;将使得你可以通过 ChatGPT-Next-Web 或者其他第三方客户端&#xff0c;使用 Github Copilot 的 GPT-4 模型进行对话。 步骤 安装并启动 copilot-gpt4-service 服务 首先&#…

原型设计工具Axure RP结合内网穿透实现本地web页面公网访问协同办公

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

coala,一个超级实用的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超级实用的 Python 库 - coala。 Github地址&#xff1a;https://github.com/coala/coala/ 在现代软件开发中&#xff0c;代码质量和一致性是非常重要的。然而&#xff0c…

Docker 的工作原理及安装步骤【云原生】

文章目录 1. Docker 的工作原理2. Docker 与虚拟机3. Docker 架构4. 安装 Docker5. 配置镜像加速 1. Docker 的工作原理 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署会碰到一些问题&#xff1a; ① 依赖关系复杂&#xff0c;容易出现兼容性问题&#xff1…