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

力扣字典序问题详解

1.字典序大小比较方法

对于两个不同的字符串,从左到右逐个比较它们的字符,如果在某个位置上它们的字符不同,则将它们按照该位置上的字符的字母顺序进行排序,即较小的字符排在前面,较大的字符排在后面。如果一直比较到其中一个字符串结束,则较短的字符串排在前面;如果两个字符串完全相同,则它们的字典序相同。可以将它们看作是按照字母表的顺序进行排列的。

2.力扣例题

①:386. 字典序排数

给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。
你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1:
输入:n = 13
输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2:
输入:n = 2
输出:[1,2]
// 字典序排序问题比较适合于DFS
// 所以本题采用DFS+递归的方式解决
class Solution {private List<Integer> res=new ArrayList<>();private int n;public List<Integer> lexicalOrder(int n) {this.n=n;for (int i = 1; i <= 9; i++) {dfs(i);}return res;}private void dfs(int n) {if(n>this.n){return;}res.add(n);for (int i = 0; i <= 9; i++) {dfs(n*10+i);}}
}

②:2697. 字典序最小回文串

给你一个由 小写英文字母 组成的字符串 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" 。
class Solution {public String makeSmallestPalindrome(String s) {StringBuilder sb=new StringBuilder(s);int len=sb.length();for (int i = 0; i <len/2 ; i++) {if(sb.charAt(i)!=sb.charAt(len-i-1)){char c=(char) Math.min(sb.charAt(i),sb.charAt(len-i-1));sb.setCharAt(i,c);sb.setCharAt(len-i-1,c);}}return sb.toString();}
}

相关文章:

  • 焊接缺陷检测系统源码分享
  • C语言-线程
  • 李宏毅机器学习2022-HW8-Anomaly Detection
  • java的匿名内部类和lambda表达式
  • C语言VS实用调试技巧
  • 隧道灯光远程控制系统的设计与实现(论文+源码)_kaic
  • Spring Boot 进阶-Spring Boot 开发第一个Web接口
  • Java集合框架与Lambda表达式实践指南(小白速看)
  • 大模型Agent开发框架对比:LangGraph/LlamaIndex/DIY
  • 7-1.Android SQLite 之 SQLiteDatabase 简单编码模板(SQLiteDatabase 使用、SQL 语句编写)
  • 工业缺陷检测——Windows 10本地部署AnomalyGPT工业缺陷检测大模型
  • 综合题第二题(路由器的配置)
  • 高考技术——pandas使用
  • FastGPT大模型介绍
  • Python面向对象基础:类属性
  • [deviceone开发]-do_Webview的基本示例
  • [译]前端离线指南(上)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 0x05 Python数据分析,Anaconda八斩刀
  • docker容器内的网络抓包
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • go append函数以及写入
  • LintCode 31. partitionArray 数组划分
  • MYSQL 的 IF 函数
  • Nacos系列:Nacos的Java SDK使用
  • Vue实战(四)登录/注册页的实现
  • 缓存与缓冲
  • 机器学习 vs. 深度学习
  • 基于axios的vue插件,让http请求更简单
  • 坑!为什么View.startAnimation不起作用?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 学习ES6 变量的解构赋值
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #java学习笔记(面向对象)----(未完结)
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (2022 CVPR) Unbiased Teacher v2
  • (3)STL算法之搜索
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (MATLAB)第五章-矩阵运算
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (转)Unity3DUnity3D在android下调试
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .dwp和.webpart的区别
  • .gitignore文件忽略的内容不生效问题解决
  • .gitignore文件---让git自动忽略指定文件
  • .NET Micro Framework初体验
  • .net Signalr 使用笔记
  • .net wcf memory gates checking failed
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • /bin/rm: 参数列表过长"的解决办法