leetcode 2645. 构造有效字符串的最少插入数-python

news2025/4/23 18:15:21

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

如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效 。
在这里插入图片描述

解题方法

1.先判断字符串是否全是由abc组成
2.判断字符串是否全是由单个a或b或c组成
3.字符串长度为2,只需添加一次情况
4.遍历

  • 使用for循环会出现 for i in range(s) 在循环里i+n无效 如:当前i= 2 循环里i+2 4,进入下一次循环
    i为i+1 即3 所以用while循环,用while,则需先定义当前i为0,且i<len(word)

  • 字符判断时,首先先判断是否是字符串中的最后一个字符,是则不再进行后续的循环

  • 不是最后一个字符,接着判断n种情况,ab、ac、bc、abc、a、b、c这几种情况需要添加字符数量,下一轮从哪个字符开始遍历

代码:

class Solution(object):
    def addMinimum(self, word):
        """
        :type word: str
        :rtype: int
        """
        s=len(word)
        #判断字符串是否全是由abc组成
        if s==0 or (word.count('abc') == s/3 and s%3==0):
            return 0
        #字符串是否全是由单个a或b或c组成
        elif word.count(word[0])== s:
            return s*2
        #字符串长度为2,只需添加一次情况
        elif s==2 and word in ('ab','ac','bc'):
            return s//2
        count =0
        i = 0
        #遍历
        while i<s:
            if word[i] =='a' and i<s:
                #当前字符是否是字符串最后一个字符
                if i+1 ==s:
                    count+=2
                    break
                if word[i+1] =='b' and i+1<s:
                    if i+2==s:
                        count+=1
                        break
                    if word[i+2] =='c' and i+2<s:
                        if i+3==s:
                            break
                        i+=3
                    else:
                        count+=1
                        i+=2
                elif word[i+1] =='c' and i+1<s:
                    if i+2==s:
                        count+=1
                        break
                    count+=1
                    i+=2
                else:
                    count+=2
                    i+=1
                
            elif word[i]=='b' and i<s:
                if i+1==s:
                    count+=2
                    break
                if word[i+1] =='c' and i+1<s:
                    if i+2==s:
                        count+=1
                        break
                    count+=1
                    i+=2
                else:
                    count+=2
                    i+=1
            else:
                if i+1==s:
                    count+=2
                    break
                count+=2
                i+=1
        return count

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

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

相关文章

李沐之神经网络基础

目录 1.模型构造 1.1层和块 1.2自定义块 1.3顺序块 1.4在前向传播函数中执行代码 2.参数管理 2.1参数访问 2.2参数初始化 3.自定义层 3.1不带参数的层 3.2带参数的层 4.读写文件 4.1加载和保存张量 4.2加载和保存模型参数 1.模型构造 1.1层和块 import torch fr…

一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读

论文题目&#xff1a;A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化&#xff0c;然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…

阿里云服务部署docker容器

1.1 为什么要用docker 问题 开发、测试、生产环境不统一&#xff0c;造成项目测试、部署时产生问题 解决方案 使用容器化技术&#xff0c;将环境和项目一起发送给测试、部署人员&#xff0c;测试人数和运维人员直接使用发过 来的环境和项目进行操作&#xff0c;避免环境不统一…

【卡梅德生物】单B细胞技术:牛单抗制备

1.牛单B细胞技术原理 单个B细胞抗体制备技术是近年来新发展的一类快速制备单克隆抗体的技术&#xff0c;基于流式细胞分选技术进行单B细胞单抗制备&#xff0c;利用每个B细胞只含有一个功能性重链可变区DNA序列和一个轻链可变区DNA序列且只产生一种特异性抗体的特性&#xff0c…

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客&#xff1a;Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程&#xff08;群友Blev提供&#xff09; - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net) 一. 环境准备 1.下载qt5源码&#xff1a;Open Source Development | Open Source …

MathType绝对是我数学编辑的首选工具!

去年&#xff0c;微软曾说&#xff0c;要去掉Office里的公式编辑器&#xff0c;建议用户使用MathType编辑公式。目前Office用户可以到微软官网安装MathType的插件&#xff0c;现在免费使用&#xff0c;以后要收费。Word里安装这个插件以后&#xff0c;就会出现MathType的菜单。…

双交叉限幅控制总结

空燃比小于等于1使用下图&#xff1a;空燃比大于1&#xff0c;MAX变MIN&#xff0c;MIN变MAX&#xff0c;高低选互换即可。加负荷&#xff0c;先加空气&#xff0c;后加煤气&#xff0c;降负荷&#xff0c;先降煤气&#xff0c;后降空气。 交叉限幅和双交叉限幅的区别 交叉限幅…

磷酸铁锂电池生产污废水需要哪些工艺及设备

磷酸铁锂电池作为一种常见的锂离子电池&#xff0c;已广泛应用于电动汽车、储能系统等领域。然而&#xff0c;在磷酸铁锂电池的生产过程中&#xff0c;难免会产生一定量的污废水。为了有效处理和处理这些污废水&#xff0c;我们需要合适的工艺和设备。 首先&#xff0c;针对磷酸…

java期末复习题

1.任何一个Java程序都默认引入一个包&#xff0c;这个包的名字是________________。 正确答案&#xff1a;java.lang Java程序默认引入的包是java.lang包。这个包是Java语言的核心&#xff0c;它提供了Java中的基础类&#xff0c;包括基本Object类、Class类、String类、基本类…

react 项目结构配置

1 项目整体目录结构的搭建 如下图&#xff1a; 2 重置css样式: normalize.css reset.less ; 第一步 安装 npm i normalize.css 入口文件index.tsx导入&#xff1a;import ‘noremalize.css’ 第二步 创建自己的css样式&#xff1a;在assets文件夹中创建css…

【MySQL】:掌握SQL中DDL的数据库定义与操作

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. SQL的分类二. DDL数据库操作2.1 查询所有数据库2.2 查询当前数据库2.3 创建数…

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程序设计参考资料 分…

《设计模式的艺术》笔记 - 简单工厂模式

介绍 定义一个工厂类&#xff0c;它可以根据参数的不同返回不同类的实例&#xff0c;被创建的实例通常都具有相同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法&#xff0c;因此简单工厂模式又被称为静态工厂方法模式&#xff0c;属于类创建型模式 实现 class Pr…

实现JavaScript的函数链式执行

本篇文章将会实现函数链式执行&#xff0c;链式步骤延时等操作。 1.工具类 const executor (name) > {/*** 执行器名称*/const executorName name;/*** 方法数组*/const methodArray [];/*** 同步执行某个方法*/function run(func){methodArray.push(func);return this…

谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)

问题原因 Unity应用(target SDK 34)上线到GooglePlay&#xff0c;有用户反馈fold5设备上&#xff08;Android14系统&#xff09;疯狂闪退&#xff0c;经测试&#xff0c;在小米手机Android14系统的版本复现成功了&#xff0c;奇怪的是apk直接安装没问题&#xff0c;而打包成aa…

Android开发基础(二)

Android开发基础&#xff08;二&#xff09; 上篇主要描述了Android系统架构&#xff0c;代码是通过Java表示的&#xff1b; 本篇将从介绍Android组件去理解Android开发&#xff0c;代码将对Java和Kotlin进行对比。 Android组件 Android应用程序由一些零散的有联系的组件组成…

伴鱼离线数仓建设案例

伴鱼数仓建设案例 伴鱼离线数仓建立&#xff0c;与伴鱼的业务一起快速发展&#xff0c;从一条业务线&#xff0c;到多条业务线。在演进的过程中&#xff0c;有很多总结和沉淀的内容。本篇文章主要介绍伴鱼离线数据仓库的发展历史&#xff0c;在发展过程中遇到的各种问题&#…

人工智能ai写作软件哪个好,看看这6款

现如今人工智能AI写作软件逐渐成为写作者们的得力助手。这些软件利用先进的自然语言处理技术&#xff0c;能够帮助用户快速生成高质量的中文文章。在众多中文人工智能AI写作软件中&#xff0c;以下6款软件凭借其独特的优势脱颖而出&#xff0c;为用户提供了高效的写作体验。 软…

NetApp E系列(E-Series)OEM产品介绍以及如何收集日志和保存配置信息

NetApp E系列是NetApp收购LSI存储后建立的一条新的产品线&#xff0c;由于LSI存储的历史悠久&#xff0c;所以这条产品线给NetApp带来了很多的OEM产品&#xff0c;可以说E系列是世界上OEM给最多公司的存储产品线也不为过&#xff0c;因为最早LSI的产品销售测率就是OEM&#xff…

Java 面试题 - 多线程并发篇

线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类&#xff0c;并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码&#xff1a; class MyThread extends Thread {public void run() {// 定义线程的行为} …