leetcode 1957 删除字符使字符串变好

2024-08-28 21:04

本文主要是介绍leetcode 1957 删除字符使字符串变好,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

leetcode 1957 删除字符使字符串变好

  • 正文
    • 题目说明
    • Python 常用技巧
    • 解题思路
    • 方法1
    • 方法2
    • 方法3

正文

题目说明

在这里插入图片描述

Python 常用技巧

Python 中在字符串中做删除元素的操作是很困难的,通常我们都会创建一个新的字符串或者列表,然后进行循环,将不需要被删除的字符添加进新的字符串或者列表中,最后获取结果。

解题思路

从题目可知,连续三个相同字符出现时,删除第三个字符,那么我们需要分情况,当给定字符串的长度小于 3 时,直接输出原始字符串即可,而当原始字符串的长度大于 3 时我们需要判断是否存在连续三个相同的字符,即 s[i] == s[i-1] == s[i-2],在理解了这一层后我们即可写出如下代码。

方法1

class Solution:def makeFancyString(self, s: str) -> str:     if len(s) < 2:return selse:lst = [s[0], s[1]]for i in range(2, len(s)):if s[i] == s[i - 1] == s[i - 2]:continueelse:lst.append(s[i])return ''.join(lst)

方法2

方法 1 中给出的代码解决了问题,但是这个分情况讨论的 if else 显得有些冗杂,我们可不可以去掉这个判断呢?我们可以将 if 判断放在 for 循环下的 if 中也可以实现相同的结果。

class Solution:def makeFancyString(self, s: str) -> str:lst = []for i in range(len(s)):if len(lst) >=2 and s[i] == s[i - 1] == s[i - 2]:continuelst.append(s[i])return ''.join(lst)

上述写法代码非常简单,但是逻辑关系并不通俗易懂,且因为我们将 len(lst) 长度判断放置在了 for 循环下,每一次 for 循环都要额外做一次长度判断,显然会增加代码处理的时间。个人倾向于使用方法 1 完成对应的操作。

方法3

class Solution:def makeFancyString(self, s: str) -> str:s1 = ''for i in range(len(s)):if len(s1) >=2 and s[i] == s[i - 1] == s[i - 2]:continues1 += s[i]return s1

我们在之前 Python 的常用技巧中提及了可以生成一个空的字符串来完成这一操作,但是这种方式的用时比使用列表更长。因此,以后的字符串操作,我们都尽量使用列表来完成。

如果大家觉得有用,就请点个赞吧~

这篇关于leetcode 1957 删除字符使字符串变好的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115876

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

MybatisPlus中removeById删除数据库未变解决方案

《MybatisPlus中removeById删除数据库未变解决方案》MyBatisPlus中,removeById需实体类标注@TableId注解以识别数据库主键,若字段名不一致,应通过value属... 目录MyBATisPlus中removeBypythonId删除数据库未变removeById(Se

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用