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

【LeetCode刷题日记】:字符串替换技巧揭秘

个人主页北极的代码欢迎来访作者简介java后端学习者❄️个人专栏苍穹外卖日记SSM框架深入JavaWeb✨命运的结局尽可永在不屈的挑战却不可须臾或缺前言昨天是周六本来是说每天更新两个文章一篇算法相关的一篇后端的但是我虽然早上写了两题算法下午出去了然后晚上回来学了会项目再把文章发出来就已经凌晨了所以就留到周末来发这个算法题目了主要内容就是关于字符串的相关算法。题目背景卡码网 替换数字给定一个字符串 s它包含小写字母和数字字符请编写一个函数将字符串中的字母字符保持不变而将每个数字字符替换为number。例如对于输入字符串 a1b2c3函数应该将其转换为 anumberbnumbercnumber。对于输入字符串 a5b函数应该将其转换为 anumberb输入一个字符串 s,s 仅包含小写字母和数字字符。输出打印一个新的字符串其中每个数字字符都被替换为了number样例输入a1b2c3样例输出anumberbnumbercnumber数据范围1 s.length 10000。题目分析首先拿到这个题目显然就是字符串反转的问题但是又多了一些别的逻辑处理首先扩充数组到每个数字字符替换成 number 之后的大小。例如 字符串 a5b 的长度为3那么 将 数字字符变成字符串 number 之后的字符串为 anumberb 长度为 8。然后从后向前替换数字字符也就是双指针法过程如下i指向新长度的末尾j指向旧长度的末尾。为什么要从后向前填充从前向后填充不行么从前向后填充就是O(n^2)的算法了因为每次添加元素都要将添加元素之后的所有元素整体向后移动。其实很多数组填充类的问题其做法都是先预先给数组扩容带填充后的大小然后在从后向前进行操作。这里需要注意的是我们用的是javajava底层的字符串是不可变的所以我们要转成字符数组进行处理。之后我们将这个转成字符数组拷贝到新的已经扩容的字符数组中然后进行一系列的反转。char[] newS new char[s.length() count * 5];关于这个count也就是我们通过遍历得到字符串中有几个数字从而count一个count对应五个位置。接下来就是新数组中的处理了整体演示比较好理解原字符串: a 1 b 索引: 0 1 2 新数组(初始): a 1 b _ _ _ _ _ 索引: 0 1 2 3 4 5 6 7 从后向前处理: 第1步: 复制b → b 索引: 7 第2步: 遇到1 → 填入 number(反向) 填入: n u m b e r 索引: 1 2 3 4 5 6 最终结果: a n u m b e r b 0 1 2 3 4 5 6 7 转为字符串: anumberb主要还是要判断哪个位置是数字然后从后往前填充至于为什么这样因为如果是从前往后每次添加元素都要将添加元素之后的所有元素整体向后移动。题目答案import java.util.Scanner; public class Main { public static String replaceNumber(String s) { int count 0; // 统计数字的个数 int sOldSize s.length(); for (int i 0; i s.length(); i) { if(Character.isDigit(s.charAt(i))){ count; } } // 扩充字符串s的大小也就是每个空格替换成number之后的大小 char[] newS new char[s.length() count * 5]; int sNewSize newS.length; // 将旧字符串的内容填入新数组 System.arraycopy(s.toCharArray(), 0, newS, 0, sOldSize); // 从后先前将空格替换为number for (int i sNewSize - 1, j sOldSize - 1; j i; j--, i--) { if (!Character.isDigit(newS[j])) { newS[i] newS[j]; } else { newS[i] r; newS[i - 1] e; newS[i - 2] b; newS[i - 3] m; newS[i - 4] u; newS[i - 5] n; i - 5; } } return new String(newS); }; public static void main(String[] args) { Scanner scanner new Scanner(System.in); String s scanner.next(); System.out.println(replaceNumber(s)); scanner.close(); } }总结这个算法的核心思路先创建足够大的新数组复制原内容到新数组前半部分从后向前处理遇到非数字直接复制遇到数字则从后往前写入 number覆盖原数字位置因为 number 比 1 长必须向后延伸所以从后向前处理可以避免覆盖未处理的内容第二种写法// 为了还原题目本意先把原数组复制到扩展长度后的新数组然后不再使用原数组、原地对新数组进行操作。 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); String s sc.next(); int len s.length(); for (int i 0; i s.length(); i) { if (s.charAt(i) 0 s.charAt(i) 9) { len 5; } } char[] ret new char[len]; for (int i 0; i s.length(); i) { ret[i] s.charAt(i); } for (int i s.length() - 1, j len - 1; i 0; i--) { if (0 ret[i] ret[i] 9) { ret[j--] r; ret[j--] e; ret[j--] b; ret[j--] m; ret[j--] u; ret[j--] n; } else { ret[j--] ret[i]; } } System.out.println(ret); }流程计算新数组长度text原长度 3 遇到数字1 → len 5 → len 8步骤2创建新数组并复制java char[] ret new char[8]; // [_, _, _, _, _, _, _, _] // 复制原字符串 ret [a, 1, b, _, _, _, _, _] 0 1 2 3 4 5 6 7步骤3从后向前填充java i 2, j 7第1次循环 (i2)ret[2] b不是数字java ret[7] b j 6结果[a, 1, b, _, _, _, _, b]第2次循环 (i1)ret[1] 1是数字java ret[6] r // j6→5 ret[5] e // j5→4 ret[4] b // j4→3 ret[3] m // j3→2 ret[2] u // j2→1 ret[1] n // j1→0结果[a, n, u, m, b, e, r, b]第3次循环 (i0)ret[0] a不是数字java ret[0] a // j0→ -1整体的逻辑更清晰易懂逻辑清晰i只管遍历原内容j只管填充新位置容易理解标准的双指针从后向前填充模式没有歧义不需要判断j i这种边界条件正确性保证每个数字固定多占5个位置指针移动步数确定结语其实在写算法题的时候我们要养成手撕的习惯这对我们以后的面试帮助很大刚开始肯定很难有时候连方法的格式返回值什么的都写的模糊不清但只要坚持下来会收获很大。如果对你有帮助请点赞关注收藏你的支持就是我最大的鼓励

相关文章:

【LeetCode刷题日记】:字符串替换技巧揭秘

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

ADS 2023 保姆级教程:从巴特沃斯到椭圆,手把手仿真你的第一个低通滤波器

ADS 2023 实战指南:三步完成低通滤波器设计与仿真 刚打开ADS软件时,那些密密麻麻的工具栏和陌生的术语确实容易让人望而生畏。但别担心,现代EDA工具早已将复杂的滤波器设计过程封装成了可视化操作。就像用智能手机拍照不需要理解图像传感器原…...

TRNSYS模块太多记不住?这份保姆级模块速查手册(附中英文对照)帮你快速定位

TRNSYS模块速查实战指南:从分类逻辑到精准调用 面对TRNSYS中数百个模块编号和复杂的英文命名体系,许多工程师在搭建系统模型时都会陷入"选择困难"。本文将彻底改变你查找模块的方式——我们不再简单罗列中英文对照表,而是从实际建模…...

为什么DeepMind、OpenAI、清华交叉信息院都在抢建“证明优先”AGI架构?——2026奇点大会核心议程深度泄露(含3份签署NDA的架构图)

第一章:2026奇点智能技术大会:AGI与数学证明 2026奇点智能技术大会(https://ml-summit.org) AGI驱动的自动定理证明新范式 本届大会首次公开展示了基于统一认知架构的AGI系统AlphaProof-X,其在Coq和Lean 4双引擎协同下,成功完成…...

专业级硬件控制终极指南:Lenovo Legion Toolkit深度定制与性能优化

专业级硬件控制终极指南:Lenovo Legion Toolkit深度定制与性能优化 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit …...

天赐范式第16天:【硬核物理】哥本哈根学派沉默了:用纯经典混沌模拟出量子双缝干涉,量子力学统计特性可能是高维相空间混沌投影的观点(附源码)

摘要:不需要波函数,不需要概率云,甚至不需要“上帝掷骰子”。本文基于受驱摆高斯势垒的混沌系统,利用 RK45 高精度积分器,在 2000 个粒子的系综模拟中,成功复现了双缝干涉的统计包络特征,分布重…...

艾可瑞妥单抗EPKINLY真实世界经验:缓解率数据与中性粒细胞减少、发热等副作用的预防及处理

艾可瑞妥单抗(EPKINLY)作为一种创新型的双特异性T细胞衔接剂,在复发或难治性弥漫性大B细胞淋巴瘤(DLBCL)的治疗中展现出显著的疗效。缓解率数据多项真实世界研究数据支持了EPKINLY在治疗DLBCL中的显著疗效。例如&#…...

终极指南:用LeetDown免费快速降级你的iPhone,让老设备重获新生

终极指南:用LeetDown免费快速降级你的iPhone,让老设备重获新生 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown 还在为旧iPhone升级后卡顿发愁吗&#xff1…...

Windows卸载工具横向对比:极客卸载为何能脱颖而出

Windows平台的软件卸载需求催生了众多卸载工具。 面对琳琅满目的选择,用户往往难以判断哪款工具最适合自己。 本文将从多个维度对比极客卸载与其他主流方案,为读者提供客观的选择参考。 Windows系统自带的程序卸载功能是最基础的解决方案。 它通过调用软…...

极客卸载工具深度解析:6.69MB的绿色卸载神器为何备受推崇

Windows系统长期面临软件卸载不彻底的问题。 系统自带的卸载功能往往无法清除残留文件和注册表项。 这些残留数据日积月累,会严重影响系统运行效率。 极客卸载工具正是为解决这一痛点而生。 极客卸载采用绿色单文件设计模式。 整个程序解压后仅有6.69MB的体积。 这…...

CSS如何引入CSS暗黑模式配置_通过媒体特性实现主题自动化

直接用 media (prefers-color-scheme: dark) 媒体查询响应系统主题,支持 Chrome 76 等现代浏览器;需配合 no-preference 回退规则,并与 JS 主题控制协同:媒体查询管首次加载默认态,JS 管后续手动切换,避免冲…...

如何在触发器中获取更新前后的值_NEW与OLD伪记录的访问机制

MySQL和PostgreSQL中OLD/NEW字段需按触发时机(BEFORE/AFTER、INSERT/UPDATE/DELETE)正确访问,区分大小写且不可跨数据库直接移植,误用会导致报错或性能问题。触发器里怎么拿到 OLD 和 NEW 的字段值mysql 和 postgresql 都支持在行…...

解锁硬件潜能:Universal x86 Tuning Utility 让你的电脑性能全面释放

解锁硬件潜能:Universal x86 Tuning Utility 让你的电脑性能全面释放 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility …...

SCTransform vs 传统方法:单细胞亚群分析中的标准化选择与性能对比

SCTransform vs 传统方法:单细胞亚群分析中的标准化选择与性能对比 单细胞RNA测序技术正在重塑我们对复杂生物系统的理解能力。在这个数据密集的领域里,如何正确处理和标准化原始计数数据,成为决定下游分析可靠性的关键第一步。Seurat工具包作…...

3分钟实战指南:高效解决网易云音乐NCM格式播放难题

3分钟实战指南:高效解决网易云音乐NCM格式播放难题 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密格式文件无法在其他设备播放而烦恼吗?ncmdump是一款专为解决NCM格式兼容性问…...

医学影像分析新宠:Swin-Unet凭什么比传统U-Net更强?深入对比实验与避坑指南

医学影像分析新宠:Swin-Unet凭什么比传统U-Net更强?深入对比实验与避坑指南 在医学影像分析领域,图像分割技术一直是计算机辅助诊断的核心支柱。从早期基于阈值的简单分割到如今深度学习的复杂建模,这项技术正在经历从"看得见…...

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

模拟IC版图DRC实战:MIM电容天线错误与ESD.10g违例深度解析 深夜的实验室里,屏幕上的DRC报错像一场突如其来的暴风雨——37个"A.R.MIM"天线错误和12处"ESD.10g"违例。这场景对每位模拟IC版图工程师都不陌生,尤其在tape-ou…...

2026届学术党必备的五大降AI率网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当前各类AIGC检测系统越来越精准,这时使用专业的降AIGC工具,能有效降…...

2.1VMware部署Windows_server_2008_R2

1.创建虚拟机 2.自定义高级 3.默认下一步 4.稍后安装操作系统,下一步 5.选择Windows 2008 R2 64位,下一步 6.虚拟机名称和存放位置如下 7.默认下一步 8.配置如下,下一步 9.推荐内存,下一步 10.选择桥接网络,下一步 11.…...

CentOS 7下Composer报错‘missing ext-fileinfo’?手把手教你用php --ini排查并安装PHP扩展

CentOS 7下Composer报错‘missing ext-fileinfo’的终极排查指南 当你在CentOS 7服务器上运行composer install时,突然遭遇"missing ext-fileinfo"错误,这种场景对于PHP开发者来说再熟悉不过了。这个看似简单的扩展缺失问题,背后往…...

1.3大白菜重装Windows 10

前置条件:启动盘制作完成,插入U盘,BIOS选择U盘启动1.选择“启动Win10 X64 PE”2.等待一会3.等待一会4.双击桌面“大白菜一键装机”5.目标盘选择C盘,选择映像文件6.选择上传到U盘的要安装的Windows版本镜像,点击“执行”…...

【AGI金融预测实战白皮书】:SITS2026核心算法解密、回测胜率92.7%的3大模型架构与部署清单

第一章:SITS2026分享:AGI与金融预测 2026奇点智能技术大会(https://ml-summit.org) AGI驱动的多模态金融信号建模 新一代AGI系统不再依赖单一时间序列模型,而是融合新闻语义、卫星图像、链上交易流与宏观政策文本,构建跨模态联合…...

ALSA音频开发避坑:snd_pcm_drain和snd_pcm_drop到底怎么选?一个播放器实例讲清楚

ALSA音频开发实战:snd_pcm_drain与snd_pcm_drop的深度抉择指南 当你在开发一个音乐播放器时,用户点击"停止"按钮的瞬间,音频设备缓冲区里可能还存有几百毫秒未播放的数据。这时候,是让这些数据优雅地播放完毕&#xff0…...

保姆级教程:手把手教你用Wireshark和IgH主站分析EtherCAT BRD报文(0x0130/0x0131)

工业现场实战:用Wireshark与IgH主站深度解析EtherCAT BRD报文 在工业自动化现场调试中,EtherCAT网络的稳定性直接关系到产线运行效率。当从站设备突然离线或主站报拓扑错误时,如何快速定位问题?本文将带你用Wireshark抓包工具和Ig…...

智能车代码别再‘一锅炖’!模块化编程实战:从电机驱动到巡线算法的封装技巧

智能车代码别再‘一锅炖’!模块化编程实战:从电机驱动到巡线算法的封装技巧 当你第一次让智能车成功动起来时,那种成就感无与伦比。但随着功能不断增加,代码很快会变成一团乱麻——电机控制、传感器读取、算法逻辑全部挤在一个文件…...

蓝牙低功耗基-蓝牙广播

概述 广告功能是任何蓝牙LE连接中的一个关键要素。对不同的广告参数、其含义以及如何通过调整这些参数来实现应用目标(无论是降低功耗、提高可靠性还是加快设备发现过程)建立基本的理解是十分重要的。 蓝牙LE中的广告功能主要用于两个主要目的。一是向邻近设备广播数据&#…...

不用PS也能玩转迪文屏:PPT制作适配图片的另类技巧

不用PS也能玩转迪文屏:PPT制作适配图片的另类技巧 在物联网设备开发中,迪文屏因其性价比高、接口丰富而广受欢迎。但对于非设计背景的开发者来说,为800480分辨率的迪文屏准备适配图片往往成为最大痛点。传统方案依赖Photoshop等专业工具&…...

如何快速掌握Unity游戏自动翻译:XUnity.AutoTranslator完全指南

如何快速掌握Unity游戏自动翻译:XUnity.AutoTranslator完全指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 如果你是一位Unity游戏开发者或玩家,面对多语言游戏的本地化挑战&a…...

如何设置密码复杂度策略以约束MongoDB用户的密码强度

启用 pwdPolicy 前必须开启 --auth 或 security.authorization: enabled,否则策略被忽略;setSecuritySettings 仅对新用户或手动改密生效;仅 minLength 和 characterClassCount 有效,其他字段未实现。启用 pwdPolicy 前必须开启访…...

Matlab图像处理实战:用flip函数轻松搞定图像翻转、镜像与数据增强

Matlab图像处理实战:用flip函数轻松搞定图像翻转、镜像与数据增强 在计算机视觉和图像处理领域,数据预处理是模型训练前不可或缺的一环。Matlab作为科学计算领域的瑞士军刀,其内置的flip函数看似简单,却能解决图像处理中的多个痛点…...