当前位置: 首页 > news >正文

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 的常用技巧中提及了可以生成一个空的字符串来完成这一操作,但是这种方式的用时比使用列表更长。因此,以后的字符串操作,我们都尽量使用列表来完成。

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

相关文章:

  • 【ubuntu20.4 常用经验分享】
  • [RIS]GRES: Generalized Referring Expression Segmentation
  • JAVA中如何使用反射获取数组元素类型
  • [论文笔记] megatron 大模型超参搜索pipeline
  • 【练习】哈希表的使用
  • Python切片技巧,带你轻松提取数组子集!
  • NeRF笔记
  • SpringBoot 基于iText 根据PDF模板动态生成文件
  • OSError: [E050] Can‘t find model ‘en_core_web_sm‘.
  • Python爬虫(一文通)
  • OverflowError: cannot convert float infinity to integer
  • Golang使用Quic-Go开源库实现Quic客户端和服务端
  • 企业数据治理之主数据---供应商主数据
  • Java核心API——io类缓冲流
  • 什么是杨氏模量
  • Angular6错误 Service: No provider for Renderer2
  • Codepen 每日精选(2018-3-25)
  • css系列之关于字体的事
  • eclipse的离线汉化
  • Flex布局到底解决了什么问题
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • MySQL的数据类型
  • node和express搭建代理服务器(源码)
  • PAT A1017 优先队列
  • Python socket服务器端、客户端传送信息
  • Python_网络编程
  • SpiderData 2019年2月25日 DApp数据排行榜
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 对超线程几个不同角度的解释
  • 给Prometheus造假数据的方法
  • 猴子数据域名防封接口降低小说被封的风险
  • ------- 计算机网络基础
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 深入浅出Node.js
  • 数据科学 第 3 章 11 字符串处理
  • linux 淘宝开源监控工具tsar
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​zookeeper集群配置与启动
  • ​比特币大跌的 2 个原因
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # Kafka_深入探秘者(2):kafka 生产者
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #职场发展#其他
  • (2020)Java后端开发----(面试题和笔试题)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (安卓)跳转应用市场APP详情页的方式
  • (二)c52学习之旅-简单了解单片机
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (九)信息融合方式简介
  • (六)Flink 窗口计算
  • (七)c52学习之旅-中断
  • (一)UDP基本编程步骤
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置