A.每日一题:3517. 最小回文排列 I

发布时间:2026/9/21 19:12:13

A.每日一题:3517. 最小回文排列 I 题目链接3517. 最小回文排列 I中等算法原理解法一计数排序时间复杂度O(N)写法一StringBuffer79ms击败5.76%1.思路很简单利用计数排序的思想既然字符串给的是回文的那么我们只需要统计前一半就行了统计前一半中26个小写英文字符出现的次数然后从 a 遍历到 z 依次拼接即可2.拼接之后后半部分就直接翻转过来再接上这一点用 StringBuffer 可以很简单的实现3.最后一点就是看这个回文串长度是奇数还是偶数我们上述做法得到的回文串必定是偶数的如果是奇数的话差的一定是中间的那个而中间的那个在最终结果的位置必然还是在中间否则这个字符串必然不再是回文因此我们直接把原字符串的正中间的字符取出来接在中间即可4.最后根据原字符串的奇偶长度返回不同的结果即可写法二StringBuilder33ms击败54.86%思路与写法一完全相同但这个会更快因为 StringBuffer 是线程安全的中间加了很多锁而 StringBuffer 是线程不安全的没有那么多锁效率要比 StringBuffer 快不少关于线程中上锁的知识可参考Java EE2.多线程-初阶第四弹synchronized 锁内存可见性Java EE3.多线程-进阶第一弹常见的锁策略synchronized原理优化16ms击败98.96%中间重复添加相同字符的部分可以借助 repeat 实现String a a; String fiveAs a.repeat(5); // 结果就是 aaaaa解法二排序左半部分48ms击败15.03%时间复杂度O(n logn)由于 s 是回文字符串我们只需关心左半部分如何排列即可因此我们可以将左半部分拿出来排列后在用 StringBuilder 拼接上去后半部分只需要逆序拼接即可Java代码class Solution { //3517. 最小回文排列 I //解法一计数排序-写法一StringBuffer public String smallestPalindrome(String s) { if(s.length()1) return s; int[] hashnew int[26]; StringBuffer curnew StringBuffer(); for(int i0;is.length()/2;i) hash[s.charAt(i)-a]; for(int i0;i26;i) while(hash[i]--0) cur.append((char)(ia)); if(s.length()%20) return cur.toString()cur.reverse().toString(); else return cur.toString()s.charAt(s.length()/2)cur.reverse().toString(); } }class Solution { //3517. 最小回文排列 I //解法一计数排序-写法二StringBuilder public String smallestPalindrome(String s) { if(s.length()1) return s; int[] hashnew int[26]; StringBuilder curnew StringBuilder(); for(int i0;is.length()/2;i) hash[s.charAt(i)-a]; for(int i0;i26;i) while(hash[i]--0) cur.append((char)(ia)); if(s.length()%20) return cur.toString()cur.reverse().toString(); else return cur.toString()s.charAt(s.length()/2)cur.reverse().toString(); } }class Solution { //3517. 最小回文排列 I //解法一计数排序-优化 public String smallestPalindrome(String s) { int ns.length(); if(n1) return s; int[] hashnew int[26]; StringBuilder curnew StringBuilder(); for(int i0;in/2;i) hash[s.charAt(i)-a]; for(int i0;i26;i) cur.repeat(ai,hash[i]); //提前拷贝一份 StringBuilder tnew StringBuilder(cur); //回文串长度为奇数就把中间的加上 if(n%21) cur.append(s.charAt(n/2)); cur.append(t.reverse()); return cur.toString(); } }class Solution { //3517. 最小回文排列 I //解法二排序左半部分 public String smallestPalindrome(String s) { int ns.length(); int mn/2; char[] ts.substring(0,m).toCharArray(); Arrays.sort(t); StringBuilder curnew StringBuilder(); cur.append(t); //判断是否是奇数长度回文串 if(n%21) cur.append(s.charAt(m)); //逆序拼接 for(int im-1;i0;i--) cur.append(t[i]); return cur.toString(); } }
延伸阅读

更多相关文章

2026/9/20 6:06:58

Ohook:解锁Microsoft 365完整功能的终极免费解决方案

Ohook:解锁Microsoft 365完整功能的终极免费解决方案 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/oh/ohook …

2026/9/20 6:07:02

OpenCode模型配置与AI Agent开发实战指南

1. OpenCode模型配置深度解析作为AI Agent开发领域的核心工具,OpenCode的模型配置能力直接决定了Agent的智能水平和任务执行效果。今天我将结合自己多次实战经验,系统梳理OpenCode模型配置的关键要点,特别是针对opencode/xxx这类自定义模型的…

2026/9/21 19:09:24

NTN频段配置实战指南:FR1/FR2关键参数与七坑避雷

1. 这不是教科书里的协议解读,而是基站工程师凌晨三点调通NTN链路后记下的笔记“NTN频段配置”这六个字,最近半年在我们团队的周报里出现频率比咖啡因还高。不是因为3GPP Release 17/18文档写得不够厚——我桌上那摞打印稿加起来快有半米高——而是因为把…

2026/9/21 19:09:24

3个实操技巧教你无创dna结果怎么看新手避坑指南

3个实操技巧教你无创dna结果怎么看新手避坑指南 版本升级后 API 全变了,很多新手在解析无创DNA报告时直接懵圈。以前能跑的脚本突然报错,数据字段对不上,导致新手避坑第一步就卡住。别慌,今天咱们不扯虚的,直接上干货,用Python把这份…

2026/9/21 19:09:24

PSO算法优化光伏MPPT的Simulink建模与实践

1. 光伏MPPT技术背景与挑战光伏发电系统在实际运行中常常面临局部遮阴的困扰。当光伏阵列部分电池板被树木、建筑物或云层遮挡时,传统的最大功率点跟踪(MPPT)算法会出现误判,导致系统发电效率显著下降。这个问题在分布式光伏电站和建筑一体化光伏系统中尤…

2026/9/21 3:28:31

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/21 3:33:19

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/21 0:02:23

OpenResearch:构建可复现的开放式研究工作流

第一次看到“OpenResearch”这个名字,我脑子里冒出的不是某个具体软件,而更像一种研究方式的宣言:开放、可复现、可验证。这三件事放在一起,其实比大多数人想象中难得多。过去几年我一直在折腾自己的研究工作流,从纯纸…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/21 18:32:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/21 10:29:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码