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

发布时间:2026/7/31 13:02:18

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-2032期间年复合增长率(CAGR)为17.6%

全球半导体加热器行业市场深度研判:2026-2032期间年复合增长率(CAGR)为17.6%

2026/7/31 13:02:18

QYResearch调研显示,2025年全球半导体加热器市场规模大约为14.19亿美元,预计2032年将达到43.56亿美元,2026-2032期间年复合增长率(CAGR)为17.6%。纵观行业发展,当前半导体加热器呈现新能源驱动、技术迭代快…

Unity高性能滚动列表开发:FancyScrollView核心架构与实战指南

Unity高性能滚动列表开发:FancyScrollView核心架构与实战指南

2026/7/31 12:52:18

1. 项目概述:为什么我们需要FancyScrollView? 在Unity UI开发中,滚动列表(ScrollView)是展示大量数据最核心的组件之一。无论是游戏中的背包、排行榜,还是应用中的聊天记录、商品列表,都离不开它…

抖音位置如何修改,一款软件全部 OK

抖音位置如何修改,一款软件全部 OK

2026/7/31 12:52:18

前言不少短视频创作者会寻找位置更改工具,用来调整抖音展示的地理点位,天下游作为安卓领域运营已久的位置更改工具,经常被创作者拿来对比参考。本文就此开展客观技术层面科普,梳理这款软件自身特性、运行条件、优势与局限&#xf…

电芯热管理联合仿真:AMESIM与STAR-CCM+实践

电芯热管理联合仿真:AMESIM与STAR-CCM+实践

2026/7/31 13:52:21

1. 为什么需要联合仿真:电芯热管理的挑战 在新能源电池系统开发中,电芯的热行为仿真一直是个棘手的难题。我经手过的几个动力电池项目中,团队最初尝试用单一仿真工具时总会遇到这样的困境:要么能准确计算电芯内部产热但无法模拟外…

乐高漫威抽抽乐阿加莎人仔识别与收藏全攻略

乐高漫威抽抽乐阿加莎人仔识别与收藏全攻略

2026/7/31 13:52:21

在玩具收藏和开箱分享领域,乐高漫威抽抽乐系列因其盲盒属性和热门IP角色而备受关注。其中,阿加莎哈克尼斯(Agatha Harkness)作为漫威宇宙中的经典女巫角色,其乐高人仔更是系列中的亮点之一。本文将围绕如何识别、获取并…

Q-learning算法实战:从零构建AI迷宫寻路智能体

Q-learning算法实战:从零构建AI迷宫寻路智能体

2026/7/31 13:52:21

1. 项目概述:当AI学会“试错” 几年前,我第一次接触强化学习时,被一个简单的想法震撼了:一个完全不懂迷宫规则的智能体,仅凭“尝试”和“奖励”,最终能自己找到出口。这听起来像科幻情节,但用Q-…

电动自行车选购指南:电池衰减、液冷电机与智能功能深度解析

电动自行车选购指南:电池衰减、液冷电机与智能功能深度解析

2026/7/31 13:52:21

最近帮朋友选电动自行车,发现一个挺有意思的现象:很多人一上来就问“哪个牌子好”,但真正决定一辆车能不能长期用、用得省心的,往往不是品牌光环,而是几个容易被忽略的硬指标。比如同样是48V20Ah的电池,石墨…

React 拖拽上传图片功能实战:从零到完整实现

React 拖拽上传图片功能实战:从零到完整实现

2026/7/31 13:52:21

前言在现代 Web 应用中,拖拽上传已经成为提升用户体验的标配功能。用户只需将图片从文件管理器拖到网页中,系统就能自动识别、处理并上传文件。本文将带你从零开始实现一个完整的 React 拖拽上传功能,涵盖浏览器原生 API、react-dropzone 库集…

如何守护你的数字记忆:WeChatMsg聊天记录导出与数据分析实践

如何守护你的数字记忆:WeChatMsg聊天记录导出与数据分析实践

2026/7/31 13:42:20

如何守护你的数字记忆:WeChatMsg聊天记录导出与数据分析实践 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/30 9:53:22

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/30 1:17:46

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/30 2:52:37

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

2026优质EMBA择校榜单:校友圈质量高的EMBA适配民企创始人

2026优质EMBA择校榜单:校友圈质量高的EMBA适配民企创始人

2026/7/31 0:01:23

【客观独立测评】深耕商科教育测评多年,聚焦民企创始人、科创企业实控人择校痛点,避开镀金空壳、课程脱节、圈层杂乱的踩坑问题,结合真实办学数据与学员口碑,整理出适配实业高管的高性价比EMBA榜单,理性分析各项目适配…

绝区零一条龙:5分钟快速上手的终极自动化助手

绝区零一条龙:5分钟快速上手的终极自动化助手

2026/7/31 0:01:23

绝区零一条龙:5分钟快速上手的终极自动化助手 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 绝区零一条龙是一…

2026民企老板EMBA择校榜单:人脉圈广的EMBA高性价比测评

2026民企老板EMBA择校榜单:人脉圈广的EMBA高性价比测评

2026/7/31 0:01:23

【客观中立测评声明】本文基于学费成本、课程落地、圈层纯度、长期赋能四大维度实测打分,无商业洗脑吹捧,仅为民企创始人、科创高管提供真实择校参考,规避镀金踩坑陷阱。不少民营企业家读EMBA容易踩两大坑:盲目追名校排名&#xf…