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 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字