力扣每日一题 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,一经查实,立即删除!

相关文章

Java中的异常处理:Checked与Unchecked的区别

Java中的异常处理&#xff1a;Checked与Unchecked的区别 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 异常处理概述 在Java编程中&#xff0c;异常处理是一…

MySQL定位CPU利用率过高的SQL方法

前言 当mysql CPU告警利用率过高的时候&#xff0c;我们应该怎么定位是哪些SQL导致的呢&#xff0c;本文将介绍一下定位的方法。 本文所使用的方法&#xff0c;前提是你可以登录到Mysql所在的服务器&#xff0c;执行命令查看进程&#xff0c;当然让数据库管理员登录执行也可以…

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

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

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

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

怎样求解一个系统的稳态输出

要求解一个系统的稳态输出&#xff0c;需要根据系统的类型&#xff08;如线性时不变系统、非线性系统等&#xff09;、输入信号的性质&#xff08;如阶跃信号、正弦信号等&#xff09;以及系统的描述方法&#xff08;如微分方程、状态空间模型等&#xff09;。这里主要介绍线性…

数字黄金 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…

2021-2024高校毕业生的就业趋势和变化分析

一、不同行业、地区和学历层次的高校毕业生就业情况差异 行业差异&#xff1a; 教育培训行业&#xff1a;受“双减”政策影响&#xff0c;教育培训机构吸纳毕业生的数量明显下降&#xff0c;毕业生面临重新选择。互联网领域&#xff1a;互联网企业的业务优化调整力度加大&…

彻底解决 macos中chrome应用程序 的 无法更新 Chrome 弹窗提示 mac自定义参数启动 chrome.app

mac系统中的chrome app应用在每次打开是都会提示一个 “无法更新 Chrome Chrome 无法更新至最新版本&#xff0c;因此您未能获得最新的功能和安全修复程序。” &#xff0c; 然而最新的chrome 程序似乎在某些情况下居然会出现 输入和显示不一致的情况&#xff0c;暂时不想升…

You编程__封装ElementPlus通用组件(会持续更新...)

YOU编程__封装ElementPlus通用组件&#xff08;会持续更新…&#xff09; 1、通用表格组件 CommonTable.vue <template><div><el-form :model"query" inline class"query-form"><el-form-item><el-input v-model"query…

htmlcss面试题总结

网络中使用最多的图片格式有哪些 jpg, png, svg,webp,bmp; 请简述css盒子模型 盒子模型是指html的每个元素都像一个盒子&#xff0c;可以设置宽高&#xff0c;主要由content box&#xff0c;padding box&#xff0c;border&#xff0c; 和margin组成 视频/音频标签的使用 …

js栈的队列

// 定义 Queue 类 class Queue {constructor() {// 使用两个栈来模拟队列this.stack1 [];this.stack2 [];}// 入队操作&#xff0c;将元素添加到队列末尾enqueue(element) {// 将 stack1 中的元素移到 stack2while (this.stack1.length > 0) {this.stack2.push(this.stack…

Kithara设置专用CPU

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

2024年道路运输企业主要负责人试题

1、【多选题】下列关于客运车辆管理的说法中&#xff0c;正确的有( )。(ABCE) A、道路旅客运输企业是客运车辆技术管理的责任主体。 B、道路运输经营者应当建立车辆技术档案制度&#xff0c;实行一车一档。 C、车辆所有权转移、转籍时&#xff0c;车辆技术档案应当随车移交。…

移远通信发布两款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的代理配置…

VBA 利用VBA查找Excel单元格内容备忘

What后的内容是要查找的文本。 lookat是查找的模式&#xff0c;xlWhole&#xff1a;是一致匹配查找&#xff0c;xlPart&#xff1a;是部分匹配查找。 需要注意的是需要判断查找的Range是否存在&#xff0c;不进行判断直接用的话容易发生错误。 Sub FindCell()Dim rngFind As…