37.构造回文字符串问题|Marscode AI刷题
1.题目
问题描述
小C手中有一个由小写字母组成的字符串 s
。她希望构造另一个字符串 t
,并且这个字符串需要满足以下几个条件:
t
由小写字母组成,且长度与s
相同。t
是回文字符串,即从左到右与从右到左读取相同。t
的字典序要小于s
,并且在所有符合条件的字符串中字典序尽可能大。
小C想知道是否能构造出这样的字符串 t
,输出这样的t
。如果无法构造满足条件的字符串,则输出 -1
。
测试样例
样例1:
输入:s = "abc"
输出:
'aba'
样例2:
输入:s = "cba"
输出:
'cac'
样例3:
输入:s = "aaa"
输出:
'-1'
2.思路
- 构造回文字符串:
- 首先,我们需要构造一个字典序最大的回文字符串
t
。回文字符串的特点是从左到右和从右到左相同。因此,我们可以通过复制字符串的一半来构造回文字符串,保证回文性质。
- 首先,我们需要构造一个字典序最大的回文字符串
- 判断构造的回文是否满足条件:
- 构造的回文字符串
t
字典序应该小于原始字符串s
,如果满足这个条件,就可以直接返回t
。
- 构造的回文字符串
- 调整字典序:
- 如果通过构造回文字符串得到的
t
字典序不满足t < s
,则需要从回文的中间位置开始尝试逐步减小字典序。 - 从回文的中心开始,向左逐步调整字符,使得它们比原本的字符小,从而保证字典序尽可能大,但依然小于
s
。
- 如果通过构造回文字符串得到的
- 返回结果:
- 如果能够找到符合条件的回文字符串
t
,则返回它;如果无法调整使得字典序小于s
,则返回1
。
- 如果能够找到符合条件的回文字符串
3.代码
def solution(s: str) -> str:# 将输入字符串转为列表方便操作s = list(s)n = len(s)# 定义一个函数,用于将字符串调整为回文字符串def build(t):s = t.copy() # 复制 t,避免修改原始列表l, r = 0, n - 1 # 定义双指针,左指针从0开始,右指针从n-1开始# 使用双指针构造回文while l < r:s[r] = s[l] # 将左侧字符赋值给右侧l += 1r -= 1return s# 尝试直接将 s 构造成回文字符串t = build(s)if t < s: # 如果构造的回文字符串字典序小于原字符串ans = telse:# 如果直接构造的回文不满足字典序小于 s 的条件# 从回文中心开始尝试减小字典序i = (n - 1) >> 1 # 确定中间位置,向左遍历while i >= 0:if s[i] == 'a': # 如果当前字符为 'a's[i] = 'z' # 将其变为 'z'else:s[i] = chr(ord(s[i]) - 1) # 将当前字符减小一个字母break # 减小成功后退出循环i -= 1 # 向左移动指针if i == -1: # 如果遍历完成仍无法减小字典序ans = ["-1"] # 无法构造符合条件的字符串else:# 成功减小字典序后,重新构造回文ans = build(s)return "".join(ans) # 返回最终结果,将列表转为字符串# 测试用例
if __name__ == '__main__':# 测试样例1,输入 "abc",期望输出 "aba"print(solution(s = "abc") == 'aba') # 输出 True 表示通过测试# 测试样例2,输入 "cba",期望输出 "cac"print(solution(s = "cba") == 'cac') # 输出 True 表示通过测试# 测试样例3,输入 "aaa",期望输出 "-1"print(solution(s = "aaa") == '-1') # 输出 True 表示通过测试
- i = (n - 1) >> 1
在代码中,i = (n - 1) >> 1
是一种计算字符串中间位置的常见方式,其中:
解释
-
位运算:
>> 1
表示右移一位,即将一个数除以 2,向下取整。例如:
- 5>>1=25 >> 1 = 25>>1=2 (整数除法结果)。
- 4>>1=24 >> 1 = 24>>1=2。
-
表达式含义:
(n - 1) >> 1
计算了字符串 sss 的中心位置的索引:- n−1n - 1n−1:字符串的最大索引位置。
- 右移一位相当于除以 2,得到中心索引位置。
- 这是一个向左偏的中心索引,适用于在字符串中以双指针的方式从中心向两边遍历。
- 为什么
’a’
要变成’z’
? 如果字符已经是'a'
,你不能再减小它,因为'a'
是字母表中的最小字符。这将意味着要将前一位字母减小一位,为了保证t
在所有符合条件的字符串中字典序尽可能大,所以将’a'
要变成’z'
相关文章:
37.构造回文字符串问题|Marscode AI刷题
1.题目 问题描述 小C手中有一个由小写字母组成的字符串 s。她希望构造另一个字符串 t,并且这个字符串需要满足以下几个条件: t 由小写字母组成,且长度与 s 相同。t 是回文字符串,即从左到右与从右到左读取相同。t 的字典序要小…...

ssm-mybatisPlus学习笔记
注意!mybatisPlus只能够进行单表操作,其他的仍需要mybatis 1.快速入门 编写启动类 MapperScan("com.atguigu.mapper") SpringBootApplication public class MainApplication {public static void main(String[] args) {SpringApplication.r…...
【算法学习笔记】35:扩展欧几里得算法求解线性同余方程
线性同余方程问题 线程同余方程问题是指 a x ≡ b ( m o d m ) ax \equiv b~(mod~m) ax≡b (mod m),给定 a a a、 b b b和 m m m,找到一个整数 x x x使得该方程成立,即使得 a x m o d m b ax~mod~mb ax mod mb,随便返回任何一个…...

线性规划:机器学习中的优化利器
一、线性规划的基本概念 线性规划(Linear Programming, LP)是运筹学中数学规划的一个重要分支,用于在一组线性不等式的约束条件下,找到线性目标函数的最大值或最小值。其问题可以表述为: 在一组线性约束条件 s.t.&am…...
Ubuntu开发中的问题
1.退出anaconda指令:conda deactivate 2.Linux系列:一打开终端就默认进入conda的base环境,取消方法 在终端输入conda config --show,会显示所有的配置信息,然后利用conda config --set来修改此配置: conda config --se…...
MAC 地址转换为标准大写格式
// ConvertToStandardMac 将 MAC 地址转换为标准格式,确保每个字节都是两位,并且字母是大写的 func ConvertToStandardMac(mac string) (string, error) { // 分割 MAC 地址的每一部分 parts : strings.Split(mac, ":") // 确保每部分是两…...

使用插件SlideVerify实现滑块验证
作者gitee地址:https://gitee.com/monoplasty/vue-monoplasty-slide-verify 使用步骤: 1、安装插件 npm install --save vue-monoplasty-slide-verify 2、在main.js中进行配置 import SlideVerify from vue-monoplasty-slide-verify; Vue.use(SlideV…...
深入探索 Nginx 的高级用法:解锁 Web 服务器的强大潜能
在当下互联网技术飞速发展的浪潮中,Nginx 凭借其轻量级、高性能的特性,在 Web 服务器和反向代理服务器领域脱颖而出,成为众多开发者和运维工程师的得力工具。它不仅能高效处理静态资源,在负载均衡、反向代理等方面也表现出色。然而…...
(01)搭建开发环境
1.安装虚拟机软件 VMware Workstation Pro 17 2.虚拟机安装ubuntu20.4系统 3.安装VMtools工具 4.安装vim编辑器 sudo apt install vim 4.安装SSH服务 选择下载源为:http://mirrors.aliyun.com/ubuntu在线安装:sudo apt-get install openssh-serv…...
Win11桌面右键刷新选项在二级界面的修正方法
win10已经被弃用了,现在的win11在桌面右键时,“刷新”按钮在二级界面。除此以外,在资源管理器中浏览文件的时候,很多其他选项也都被放在了二级界面,非常不方便。接下来介绍一个把右键菜单栏中的所有选项都显示在一级界…...

配电室防静电地板通常用哪种
配电室是指带有低压负荷的室内配电场所,包含变压器、配电柜、开关设备等,主要为低压用户配送电能。为防止设备故障、避免火灾爆炸、保护人员安全等均会安装防静电地板。那么配电室防静电地板通常用哪种? 一、全钢防静电地板 1. 全钢三聚氰胺…...

【重庆市乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移内容测评
标题中的“最新重庆市乡镇界面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移最新”指的是一个地理信息系统(GIS)的数据集,特别设计用于ArcGIS软件。这个数据集包含了重庆市所有乡镇的边界信息,以Shapefile(.shp…...

68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)
<?php // 声明命名空间,遵循 PSR-4 自动加载规范,命名空间为 Home\Controller namespace Home\Controller;// 导入 Think\Controller 类,以便扩展该类 use Think\Controller;// 定义 IndexController 类,继承自 Think\Control…...

Windows电脑桌面记录日程安排的提醒软件
在快节奏的现代生活中,工作效率成为了衡量个人能力的重要标准之一。然而,日常办公中常常会遇到各种琐事和任务,如果没有合理安排日程,很容易陷入混乱,导致效率低下。因此,做好日程安排对于日常工作至关重要…...
TiDB与Oracle:数据库之争,谁能更胜一筹?
TiDB与Oracle:数据库之争,谁能更胜一筹? 最近有很多朋友在讨论数据库的选择问题,尤其是在面对大数据、分布式系统时。作为两款在企业级数据库中非常受欢迎的产品,TiDB和Oracle常常被拿来对比。TiDB 是一款开源分布式数…...

USART_串口通讯中断案例(HAL库实现)
引言 本次,继续对前面寄存器实现的串口通讯中断案例使用HAL库进行二次实现,因此这里会省略一些重复内容,如果大家不清楚的话请参考下面链接:USART_串口通讯中断案例(一)(寄存器实现)…...

【MySQL】存储引擎有哪些?区别是什么?
频率难度60%⭐⭐⭐⭐ 这个问题其实难度并不是很大,只是涉及到的相关知识比较繁杂,比如事务、锁机制等等,都和存储引擎有关系。有时还会根据场景选择不同的存储引擎。 下面笔者将会根据几个部分尽可能地讲清楚 MySQL 中的存储引擎࿰…...

[OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)
一、简介 本文介绍了 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO) 的基本概念,实现流程和简单的代码实现。实现 SSAO 时使用到了 OpenGL 中的延迟着色 (Deferred shading)技术。 按照本文代码实现后,可以实现以下…...

linux-NFS网络共享存储服务配置
1.NFS服务原理 NFS会经常用到,用于在网络上共享存储,这样讲,你对NFS可能不太了解,举一个例子, 加入有三台机器A,B,C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些 图…...

w-form-select.vue(自定义下拉框组件)
文章目录 1、w-form-select.vue 组件中每个属性的含义2、实例3、源代码 1、w-form-select.vue 组件中每个属性的含义 好的,我们来详细解释 w-form-select.vue 组件中每个属性的含义,并用表格列出它们是否与后端字段直接相关: 属性解释表格&…...
Flutter 包依赖升级指南:让项目保持最新状态
在 Flutter 开发过程中,依赖项管理是确保项目顺利运行和持续优化的关键环节。依赖项是项目中不可或缺的外部库,它们提供了各种功能,从 UI 组件到数据处理工具,帮助开发者快速构建应用。然而,随着时间的推移,…...
maven编译时跳过test过程
如果代码里有无法在打包环境中测试的部分,则直接运行mvn clean package,因为测试失败,会导致打包失败。目前有两种方式可以跳过测试: 1. mvn clean package -DskipTests,这会跳过执行阶须,但仍会生成测试所…...
Socket编程之TCP套件字
基于的TCP套件字编程流程 1. Socket套接字 Socket是一个编程接口(网络编程接口),是一种特殊的文件描述符(write/read)。Socket并不 仅限于TCP/IP Socket独立于具体协议的编程接口,这个接口位于TCP/IP四层…...
前端面经 get和post区别
get获取数据 post提交资源,引起服务器状态变化或者副作用 区别 1get会比post更不安全 get参数写在url中 post在请求体内 2get报文 head和body一起发 响应200 post报文 先发head 100 再发 body 200 3 get请求url有长度限制 4 默认缓存get 请求...

Linux系统下安装配置 Nginx
Windows Nginx https://nginx.org/en/download.htmlLinux Nginx https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf tar -zxvf nginx-1.18.0.tar.gz #解压安装依赖(如未安装) yum groupinstall "Development Tools" -y yum…...
RabbitMQ监控:关键技术、技巧与最佳实践
RabbitMQ作为企业级消息中间件的核心组件,其稳定性和性能直接影响分布式系统的可靠性。有效的监控不仅能帮助快速定位问题,还能优化系统资源分配,预防潜在故障。本文基于RabbitMQ官方文档,深入探讨其监控的技术方案、实践技巧及最…...
LeetCode Hot100 (贪心)
121. 买卖股票的最佳时机 题意 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从…...

python分配方案数 2023年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
python分配方案数 2023全国青少年信息素养大赛Python编程挑战赛复赛真题解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
目前主流图像分类模型的详细对比分析
以下是目前主流图像分类模型的详细对比分析,结合性能、架构特点及应用场景进行整理: 一、主流模型架构分类与定量对比 模型名称架构类型核心特点ImageNet Top-1准确率参数量(百万)计算效率典型应用场景ResNetCNN残差连接解决梯度…...

pycharm找不到高版本conda问题
pycharm找不到高版本conda问题 高版本的condaPycharm不能自动识别,需要手动添加。 首先打开你要添加的conda环境win的话在conda终端输入 where conda查找conda的可执行文件位置 进入Pycharm设置,点击添加解释器,点击加载环境,…...