力扣每日一题 6/27 字符串 贪心

  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

2734.执行子串操作后的字典序最小字符串【中等

题目:

给你一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以完成以下行为:

  • 选择 s 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,'b' 用 'a' 替换,'a' 用 'z' 替换。

返回执行上述操作 恰好一次 后可以获得的 字典序最小 的字符串。

子字符串 是字符串中的一个连续字符序列。

现有长度相同的两个字符串 x 和 字符串 y ,在满足 x[i] != y[i] 的第一个位置 i 上,如果  x[i] 在字母表中先于 y[i] 出现,则认为字符串 x 比字符串 y 字典序更小 。

示例 1:

输入:s = "cbabc"
输出:"baabc"
解释:我们选择从下标 0 开始、到下标 1 结束的子字符串执行操作。 
可以证明最终得到的字符串是字典序最小的。

示例 2:

输入:s = "acbbc"
输出:"abaab"
解释:我们选择从下标 1 开始、到下标 4 结束的子字符串执行操作。
可以证明最终得到的字符串是字典序最小的。

示例 3:

输入:s = "leetcode"
输出:"kddsbncd"
解释:我们选择整个字符串执行操作。
可以证明最终得到的字符串是字典序最小的。

提示:

  • 1 <= s.length <= 3 * 10**5
  • s 仅由小写英文字母组成

分析问题:

        读题意,可以知道这道题就是在从前往后遍历把每个非a的字母都变成它之前的小写字母,这里可以用ASCLL码进行实现,并且只能选择一个子序列。什么意思呢? 就是只能选择在两个a中间夹着的一个子序列,或者是一个a前面的子序列,如果前面的子序列为空字符串,那么就是a后面的子序列。

        需要注意的是,这里必须要操作一次,也就是说如果s全是a的话,也必须要执行一次操作,那么当然是选最后的一个a将其变成z是字典序最小的情况。

        思路很简单,总的来说就是把字符串以‘a’为标志分隔,取最前面一个不空的字符串作为我们选择的子字符串来修改。

        这种思路虽然是正确的,但是复杂度太高,代码太复杂,需要处理的细节很多。所以我们可以对该代码进一步优化

优化思路如下:

  1. 首先获取输入字符串 s 的长度 n ,并初始化一个索引 i 为 0 。
  2. 通过一个 while 循环,从字符串的开头开始,找到第一个不是 'a' 的字符的位置 i 。
  3. 如果整个字符串都是 'a' (即 i == n ),那么将字符串的最后一个字符改为 'z' 并返回。
  4. 然后初始化另一个索引 j = i ,通过另一个 while 循环,从位置 i 开始找到第一个 'a' 的位置 j 。
  5. 对于从位置 i 到位置 j 的这部分子串,将每个字符的 ASCII 值减 1 ,得到新的子串。
  6. 最后将原始字符串的前 i 个字符、新生成的子串和位置 j 之后的字符拼接起来返回。

代码实现:

优化前:
class Solution:def smallestString(self, s: str) -> str:# 如果字符串中没有 'a'if s.count('a')==0:# 将字符串转换为列表以便修改元素s,v = list(s),''# 遍历列表,将每个字符的 ASCII 值减 1for i in range(len(s)):s[i] = chr(ord(s[i]) - 1) # 将修改后的列表元素重新组合成字符串for l in s: v += lelse:# 计算字符串中 'a' 的个数n = s.count('a')# 按 'a' 分割字符串并转换为列表ls = list(s.split('a'))key = ''b = ''# 找到第一个非空的子串for k in ls:if k!= '':key = kb = kbreak# 如果没有找到非空子串if key == '': return s[:-1] + 'z'# 将非空子串转换为列表key = list(key)# 遍历非空子串列表,将每个字符的 ASCII 值减 1for j in range(len(key)):key[j] = chr(ord(key[j]) - 1)p = ''# 将修改后的非空子串列表元素重新组合成字符串for l in key: p += l# 将修改后的非空子串放回原列表中ls[ls.index(b)] = pv = ''# 重新组合处理后的列表为字符串,并在适当位置插入 'a'for j in ls:if j == '' and n > 0:v += 'a'n -= 1else: v += jif n > 0:v += 'a'n -= 1# 如果处理后的字符串与原始字符串不同if v!= s:return v# 如果处理后的字符串与原始字符串相同,将最后一个字符改为 'z' 并返回return v[:-1] + 'z'


优化后: 
class Solution:def smallestString(self, s: str) -> str:n = len(s)i = 0while i < n and s[i] =='a':i +=1if i == n:return s[:-1] + "z"j = iwhile j< n and s[j] != 'a':j+=1return s[:i] + "".join(chr(ord(c) - 1) for c in s[i:j]) + s[j:]


  总结:

考点

  1. 字符串的遍历和索引操作。
  2. 条件判断(while 循环的条件)。
  3. 字符的 ASCII 值操作(通过 ord 和 chr 函数)。

收获

  1. 加深了对字符串处理的理解,包括如何遍历和根据条件提取子串。
  2. 学会了使用 ord 和 chr 函数来操作字符的 ASCII 值,实现对字符的修改。
  3. 掌握了通过多个索引和循环来处理字符串中特定部分的技巧。
  4. 提高了在处理复杂字符串问题时的逻辑思维和代码实现能力。

“恋爱本质不是走向婚姻,而是探究最真实的自己。” ——《青春杂货铺》

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

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

相关文章

科研所文件数据很关键,外发图纸如何控制?

图纸是科研所整个科研周期中最重要的资料类型之一。这些图纸主要用于描述和记录研究过程中的各种设计、实验装置、设备或产品原型等。 首先&#xff0c;科研所在进行新技术、新产品或新方法的研发时&#xff0c;通常需要进行详细的设计和规划。在这个过程中&#xff0c;科研人员…

小区物业管理收费系统源码小程序

便捷、透明、智能化的新体验 一款基于FastAdminUniApp开发的一款物业收费管理小程序。包含房产管理、收费标准、家属管理、抄表管理、在线缴费、业主公告、统计报表、业主投票、可视化大屏等功能。为物业量身打造的小区收费管理系统&#xff0c;贴合物业工作场景&#xff0c;轻…

数字黄金 vs 全球计算机:比特币与以太坊现货 ETF 对比

撰文&#xff1a;Andrew Kang 编译&#xff1a;J1N&#xff0c;Techub News 本文来源香港Web3媒体&#xff1a;Techub News 比特币现货 ETF 的通过为许多新买家打开了进入加密货币市场的大门&#xff0c;让他们可以在投资组合中配置比特币。但以太坊现货 ETF 的通过&#xf…

AI从业者怎么做Science?清华大学AIR周浩:从文本生成到蛋白质设计的跨界探索

近日&#xff0c;北京智源大会「AI for Science」分论坛上&#xff0c;清华大学智能产业研究院副研究员周浩以「面向科学发现的生成式人工智能」为主题展开演讲&#xff0c; HyperAI超神经在不违原意的前提下&#xff0c;对周浩教授的深度分享进行了整理汇总。 周浩教授演讲现场…

远程过程调用(RPC)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

数字AI化银行数字化转型实战手册银行数字化转型大客户营销销售讲师培训师唐兴通谈存量客户理财金融科技与场景化

推动银行数字化转型的五个关键因素 推动银行数字化转型的五个关键因素&#xff1a; 客户体验。为客户提供便利和个性化是数字化转型的关键因素。银行应开发和实施创新的数字渠道&#xff0c;例如移动应用程序、网上银行、聊天机器人等&#xff0c;以方便获取金融服务并提高客户…

基于yolo的物体识别坐标转换

一、模型简介: 1.1、小孔成像模型简图如下:不考虑实际相机中存在的场曲、畸变等问题 相对关系为: 为了表述与研究的方便,我们将像面至于小孔之前,且到小孔的距离仍然是焦距f,这样的模型与原来的小孔模型是等价的 相对关系为: 二、坐标系简介: **世界坐标系(world coo…

Kithara设置专用CPU

设置专用 CPU 目录 设置专用 CPU 点击WINDOWS R&#xff0c;运行对话框打开&#xff0c;输入“msconfig”并确认确定。 现在会弹出一个对话框&#xff0c;您可以在其中更改 Windows 的某些设置。打开名为“引导”的第二个选项卡。 选择要配置为使用专用模块的操作系统。通常…

移远通信发布两款Wi-Fi 6模组新品:率先采用亚马逊ACK SDK for Matter方案实现互联互通

6月26日 &#xff0c;在MWC上海展上&#xff0c;全球领先的物联网整体解决方案供应商移远通信联合亚马逊及上海博通现场宣布&#xff0c;推出支持亚马逊Alexa Connect Kit &#xff08;ACK&#xff09;SDK for Matter方案的MCU Wi-Fi 6模组FLM163D和FLM263D。 后续&#xff0c;…

vite vue3使用axios解决跨域问题

引入依赖 npm install axios 在main.js中全局引入 import { createApp } from vue import App from ./App.vue import axios from axiosconst app createApp(App)// 全局引入axios app.config.globalProperties.$axios axiosapp.mount(#app) 修改vite.config.js的代理配置…

Embedding是什么?为什么重要?

本文为 Simon Willison 在 PyBay 上发表的演讲视频的文字改进版 原文链接&#xff1a; https://simonwillison.net/2023/Oct/23/embeddings/ 演讲视频链接&#xff1a; https://youtu.be/ArnMdc-ICCM Embedding 是一个非常巧妙的技术&#xff0c;但常常和一堆令人生畏的术…

vscode中快捷生成自定义vue3模板

需求描述 新建 vue 文件后&#xff0c;需要先写出 vue3 的基础架构代码&#xff0c;手动输入效率低下&#xff01; 期待&#xff1a;输入 v3 按 Tab 即刻生成自定义的vue3模板&#xff08;如下图&#xff09; 实现流程 vscode 的设置中&#xff0c;选择 用户代码片段 输入 vue…

GPU技术全景:推动未来计算的新动力-4

7.中国厂家 在中国市场&#xff0c;也有几家本土企业在GPU领域崭露头角&#xff0c;虽然市场份额相对较小&#xff0c;但在国产替代和自主可控的浪潮下发展迅速&#xff0c;包括但不限于&#xff1a; •沐曦集成电路、壁仞科技、燧原科技、登临科技、摩尔线程等&#xff0c…

列顺序占用存储大小的影响 in Oracle、MySQL、PostGreSQL

列顺序占用存储大小的影响 in Oracle、MySQL、PostGreSQL 在创建表时&#xff0c;如果相同的列类型&#xff0c;不同表列的顺序是否会影响数据库占用空间大小&#xff1f;使用oracle、mysql或postgresql是不是相同的表现呢&#xff1f; 不是的Postgresql近期发现空间使用会因为…

Fizz Buzz 经典问题 - 蓝桥杯

基础知识要求&#xff1a; Java&#xff1a;方法、if else语句、算术运算符、逻辑运算符、Scanner类 Python&#xff1a; 方法、if else语句、算术运算符、逻辑运算符、input() 题目&#xff1a; 思路解析&#xff1a; 读取输入&#xff1a; 从标准输入或其他方式读取一个整数…

DC/AC电源模块:效率与可靠性兼备的能源转换解决方案

BOSHIDA DC/AC电源模块&#xff1a;效率与可靠性兼备的能源转换解决方案 随着科技的迅速发展和人工智能技术的逐渐成熟&#xff0c;各种电子设备的需求也日益增加。然而&#xff0c;这些设备往往需要不同的电压和电流来正常工作&#xff0c;而供电方式却可能不尽相同。这时&am…

单元测试,一直转圈,既不报错也不运行结束(ssm junit4 test )

修改dataSource.properties文件 然后把mysql.version的版本修改为8.x.x 如果没有效果&#xff0c;再看看连接数据库的用户名和密码是否正确&#xff0c;一般是连接数据库出了错&#xff0c;单元测试才回一直转圈&#xff0c;我是检查了一上午才发现&#xff0c;用户名错了。 检…

一天跌20%,多只可转债“腰斩”,近百只跌破面值,“退可守”的香饽饽为何破防?

专业人士指出&#xff0c;近期部分可转债大跌原因主要有两点&#xff1a;一方面&#xff0c;转债市场与权益市场联动性强。另一方面&#xff0c;近期公布的宏观经济数据稳中趋缓&#xff0c;“供强需弱”特征依然明显&#xff0c;证监会主席吴清发言及“科创板八条”新规延续了…

在举办数字化营销活动前该如何做客户画像和制定营销方案

在当今数字化时代&#xff0c;举办成功的营销活动离不开对客户的精准了解。而根据产品属性来描绘客户画像&#xff0c;并据此制定营销方案&#xff0c;是提高营销效果的关键。 一、产品属性分析 首先&#xff0c;咱们得好好琢磨一下产品本身。比如说&#xff0c;如果是一款…

基于幅值判断的工频故障分量距离保护

统的继电保护原理是基于工频电气量的&#xff0c;但近年来&#xff0c;反应故障分量的高速继电保护原理在微机保护装置中被广泛应用。故障分量只在设备发生故障时才出现&#xff0c;因此可以用叠加原理来分析其特征。 将电力系统发生的故障视为非故障状态与故障附加状态的叠加…