字典序最小回文串

news2024/11/17 0:04:09

在这里插入图片描述

字典序最小回文串

题目解读

给你一个由 小写英文字母 组成的字符串 s ,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换 s 中的一个字符。

请你执行 尽可能少的操作 ,使 s 变成一个 回文串 。如果执行 最少 操作次数的方案不止一种,则只需选取 字典序最小 的方案。

对于两个长度相同的字符串 a 和 b ,在 a 和 b 出现不同的第一个位置,如果该位置上 a 中对应字母比 b 中对应字母在字母表中出现顺序更早,则认为 a 的字典序比 b 的字典序要小。

返回最终的回文字符串。

示例 1:

输入:s = “egcfe”
输出:“efcfe”
解释:将 “egcfe” 变成回文字符串的最小操作次数为 1 ,修改 1 次得到的字典序最小回文字符串是 “efcfe”,只需将 ‘g’ 改为 ‘f’ 。

示例 2:

输入:s = “abcd”
输出:“abba”
解释:将 “abcd” 变成回文字符串的最小操作次数为 2 ,修改 2 次得到的字典序最小回文字符串是 “abba” 。

示例 3:

输入:s = “seven”
输出:“neven”
解释:将 “seven” 变成回文字符串的最小操作次数为 1 ,修改 1 次得到的字典序最小回文字符串是 “neven” 。

提示:

1 <= s.length <= 1000
s 仅由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lexicographically-smallest-palindrome

思路分析

要将字符串转变为回文串,并且字典序最小,可以使用双指针的方法进行操作:

  1. 初始化两个指针 left 和 right,分别指向字符串的开头和结尾。
  2. 当 left < right 时,进行循环:
    • 如果 s[left] != s[right],则需要进行替换操作。
    • 优先替换较大的字符为较小的字符,即将 s[right] 替换为 s[left]。
  3. 继续移动指针,left 向右移动一步,right 向左移动一步。
  4. 重复步骤2和步骤3,直到 left >= right。
  5. 返回经过操作后得到的回文串。

通过以上步骤,可以将给定的字符串转变为一个字典序最小的回文串。以下是具体的代码实现:

class Solution(object):
    def makeSmallestPalindrome(self, s):
        s = list(s)
        left, right = 0, len(s) - 1

        while left < right:
            if s[left] != s[right]:
                if s[right] < s[left]:
                    s[left] = s[right]
                else:
                    s[right] = s[left]
            left += 1
            right -= 1

        return ''.join(s)

使用上述代码对示例进行测试可以得到相应的结果。

image-20230701201852627

image-20230701201818197

算法解析

该解使用了贪心算法,通过双指针从字符串的两端向中间遍历。当左右指针指向的字符不相同时,根据题目要求选择将较小的字符赋值给较大的字符,以保证生成的回文串是字典序最小的。

贪心策略是一种求解最优化问题的常用算法思想,它在每一步都选择当前情况下看起来最优的选择,而不考虑未来可能发生的变化。贪心算法的核心思想是通过局部最优解的选择来达到全局最优解。

具体来说,贪心策略通常包括以下步骤:

  1. 定义问题的目标函数或者评价指标。
  2. 将问题分解成若干个子问题。每个子问题都应该是原问题的一个局部部分,并且该子问题的最优解能够推导出原问题的最优解。
  3. 通过贪心选择性质,确定每个子问题的最优选择。即在每一步中,根据局部最优解的选择准则,做出当前步骤的最优选择。
  4. 将局部最优解组合起来,得到原问题的解。

需要注意的是,贪心算法并不适用于所有的最优化问题。在某些情况下,它可能会得到次优解或者无法得到正确解。因此,在使用贪心算法时需要仔细分析问题的性质,确保贪心选择性质可以得到全局最优解。

总结起来,贪心策略是一种简单而高效的求解最优化问题的方法,它通过每一步的局部最优选择来达到全局最优解。

具体算法步骤如下:

  1. 将字符串转换为列表,方便修改字符。
  2. 初始化左右指针指向字符串的首尾字符。
  3. 当左指针小于右指针时,执行循环操作:
  • 如果左右指针指向的字符不相同,则根据字典序规则,将较小的字符赋值给较大的字符。
  1. 每次循环后,移动左指针向右,右指针向左,继续比较下一对字符。
  2. 循环结束后,返回将列表转换为字符串的结果。

该算法实现了尽可能少的操作,使原字符串变成一个回文串,并且保证了生成的回文串是字典序最小的。
循环后,移动左指针向右,右指针向左,继续比较下一对字符。
5. 循环结束后,返回将列表转换为字符串的结果。

该算法实现了尽可能少的操作,使原字符串变成一个回文串,并且保证了生成的回文串是字典序最小的。

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

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

相关文章

DAY38——动态规划

步骤&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目一. 斐波那契数列 1. 确定dp数组以及下标的含义 dp[i]的定义为&#xff1a;第i个数的斐波那契数值是dp[i] 2. 确定递推公式 状态…

FFmpegFrameGrabber视频抽帧工具类

Bytedeco 通过视频链接进行关键帧抽取图片&#xff0c;利用FFmpegFrameGrabber对视频流进行抽帧处理。 一、引入POM依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.1</version><…

TCP 拥塞状态机演进

下面是 TCP 拥塞状态机&#xff1a; 但它只是冰山一角&#xff0c;这只是 loss-based 状态机&#xff0c;实现一个完全的 delay-based cc 就对不上这个状态机。 该状态机来自 RFC5681&#xff0c;源自 RFC2581&#xff0c;RFC2001&#xff0c;大概在 1990 年代&#xff0c;l…

10分钟内创意爆发,这些头脑风暴技巧让你IDEA满满

当初道叔刚入广告行业&#xff0c;与同事经历了一次困扰的头脑风暴&#xff0c;老板让他们想出一个大集团公司年会的主题口号。我们7-8个团队成员耗费了一个下午的时间&#xff0c;提出了几十个提议&#xff0c;但最终硬是没有一个能满足需求。许多人可能也有过道叔这样的经历。…

Js保留树型数据指定层级

自定义一个树型的数据 const tree [{value: 1, label: "1",children: [{value: 11, label: "1-1",children: [{value: 111, label: "1-1-1"}]}]}, {value: 2, label: "2"}]保留指定层级的方法 function keepNodesAtLevel(data, level…

vue源码阅读之Watcher类

我们上次分析vue源码讲的是收集依赖&#xff0c;数据变化之后我们把依赖收集到dep类中&#xff0c;通过这个管理器进行管理。 里面有一个subs数组&#xff0c;用来存放依赖&#xff0c;并且定义了几个实例方法用来依赖进行添加&#xff0c;删除&#xff0c;通过操作。 比如ad…

mysql基础5——mysql主从

文章目录 一、基本了解二、主从原理三、主从复制3.1 从无到有3.1.1 服务器初始化3.1.2 配置主库3.1.3 配置从库3.1.4 效果验证 3.2 从有到无3.2.1 主库全备&#xff0c;并同步到从库3.2.2 配置主库3.2.3 配置从库3.2.4 效果验证 四、数据库运维4.1 几个参数4.2 查看进程列表 一…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存&#xff0c;那么既然引入缓存&#xff0c;那就会有一个缓存与数据库数据一致性的问题。 首先&#xff0c;我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式&#xff0c;是最常见的Redis缓存模式&a…

树莓派教程2023

摘要&#xff1a;本教程只适用于最新版树莓派64位系统&#xff08;debian11&#xff09; 树莓派官网&#xff08;之前是org&#xff09;&#xff1a; https://www.raspberrypi.com/ 一.烧录系统 1.官网下载官方烧写器 https://downloads.raspberrypi.org/imager/imager_late…

部署Redis到云服务器

购买某服务商的云服务器 在云服务器中设置TCP端口号 配置云服务器的开放端口 通过telneat测试端口是否可用 配置redis服务器 需要配置一下自己云服务器的ip 保护模式关闭、允许其他远端连接 设置和云服务器开放一致的端口号 打开此项设置redis的连接密码&#xff0c;更加…

一、计算复杂度

补充说明&#xff1a; 1、决定性问题&#xff1a; 一个决定性问题(decision problem)是指其输出&#xff0c;只有“是”或“否”的问题。 一、P问题&#xff08;polynomial time class&#xff09; 1、问题描述&#xff1a; 可于确定型图灵机以多项式时间求解的决定性问题…

STM32学习之keil5环境搭建

1.keil5是开发ARM内核芯片最常用的集成开发环境IDE。STM32开发环境的搭建主要分为两步&#xff1a; 第一步&#xff0c;安装Kile5.到keil官网下载&#xff1a;Keil Embedded Development Tools for Arm, Cortex-M, Cortex-R4, 8051, C166, and 251 processor families. 第二步…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI指数的生态质量评价及拓展应用

第一章 生态环境脆弱性评价内涵及基于文献可视化方法研究热点分析 一、基本原理 生态环境脆弱性内涵 生态环境脆弱性评价研究 生态环境脆弱性驱动力研究 生态环境脆弱性研究热点 二、文献可视化软件介绍及常用功能介绍 VOS Viewer文献可视化及研究热点分析&#xff…

工业物联网时代需要什么样的数据采集设备

引言&#xff1a; 随着物联网技术的飞速发展&#xff0c;数据成为推动企业决策和创新的核心资源。然而&#xff0c;要实现高效的数据收集和分析&#xff0c;需要可靠的数据采集设备。本文将探讨物联网时代对数据采集设备的需求&#xff0c;并介绍一款优秀的工业边缘网关产品——…

软考A计划-系统集成项目管理工程师-项目范围管理(三)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

DevOps系列文章之 DevOps 运维服务体系

DevOps 体系是从原始运维一步步走过来的&#xff0c;原始运维好比是本&#xff0c;有了本进而想继续提升效率、减少出错、优化流程&#xff0c;就发展到了 DevOps&#xff0c;AIOps……各种Ops 首先&#xff0c;运维的业务职能规范后形成章程、纲领&#xff0c;在互联网快速发…

flutter手写一个底部导航栏

使用了一下flutter提供的导航栏&#xff0c;NavigationBar&#xff0c;不过感觉使用起来不是很方便。 譬如说&#xff1a; 不能直接使用图片资源&#xff0c;需要中间加几层转换把图片转化成icon文本大小及颜色不太好控制状态栏的上边来一个横线也没有相应的样式&#xff0c;等…

对 tcp out-of-window 的安全建议

TCP 收到一个 out of window 报文后会立即回复一个 ack&#xff0c;这是 RFC793 中 SEGMENT ARRIVES 段的要求。但这是为什么&#xff1f;难道不是默默丢弃才对吗&#xff1f; 对 oow 报文回复 ack&#xff0c;岂不是把正确的 ack 号回过去了吗&#xff0c;这样攻击者盲打一番…

设计模式篇---建造者模式

文章目录 概念结构实例总结 概念 建造者模式的定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。 这么看起来有点难以理解&#xff0c;翻译一下就是 用户无需关注创建复杂对象的过程&#xff0c;只需要指定创建的对象即…

一文带你了解云HIS

一、简介 基于云计算技术的B/S架构的HIS系统&#xff0c;为基层医院机构提供标准化的、信息化的、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准管理信息系统的功能。系统利用健康云计算平台的技术优势&#xff0c;建立统一的健康档案存储平台&am…