替换空格(替换特定字符)
😀前言
在字符串处理中,经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题:将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法,通过倒序遍历字符串来实现原地替换,避免额外空间的开销。
🏠个人主页:尘觉主页
文章目录
- 替换空格
- 题目链接
- 题目描述
- 解题思路
- 代码分析
- 😄总结
替换空格
题目链接
牛客网
题目描述
将一个字符串中的空格替换成 “%20”。
Input:
"A B"Output:
"A%20B"
解题思路
① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。
② 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和 P2 从后向前遍历,当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 P1 指向字符的值。从后向前遍是为了在改变 P2 所指向的内容时,不会影响到 P1 遍历原来字符串的内容。
③ 当 P2 遇到 P1 时(P2 <= P1),或者遍历结束(P1 < 0),退出。
public String replaceSpace(StringBuffer str) {int P1 = str.length() - 1;for (int i = 0; i <= P1; i++)if (str.charAt(i) == ' ')str.append(" ");int P2 = str.length() - 1;while (P1 >= 0 && P2 > P1) {char c = str.charAt(P1--);if (c == ' ') {str.setCharAt(P2--, '0');str.setCharAt(P2--, '2');str.setCharAt(P2--, '%');} else {str.setCharAt(P2--, c);}}return str.toString();
}
代码分析
为了解决这个问题,我们可以采用一种从后向前替换的策略。这种策略的好处在于,从后向前替换可以避免频繁地移动字符,从而减少时间复杂度。具体的解题思路如下:
计算空格数目: 首先遍历一遍原字符串,统计其中的空格数目。这样可以计算出替换之后的字符串的长度。
从后向前替换: 设定两个指针P1和P2,分别指向原字符串的末尾和新字符串的末尾。从后向前遍历原字符串,当P1指向的字符不是空格时,将其复制到P2指向的位置;当P1指向的字符是空格时,将"%20"逆序复制到P2指向的位置。
复杂度分析: 由于字符串的长度可能会增加,因此这种解法的时间复杂度为O(N),其中N为字符串的长度。同时,由于是在原字符串上进行操作,因此空间复杂度为O(1)。
😄总结
本文介绍了一种将字符串中的空格替换成 “%20” 的解决方法。通过从字符串末尾开始遍历,逐步替换空格,从而实现原地替换而不需额外空间。这种方法的时间复杂度为 O(n),其中 n 为字符串的长度。通过这种方法,我们可以高效地解决类似的字符串替换问题,提高程序的性能和效率。
😁热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞
相关文章:

替换空格(替换特定字符)
😀前言 在字符串处理中,经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题:将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法,通过倒序遍历字符串来实现原地替换,避免额外空间的开…...

ctfshow web入门 php特性 web123--web139
web123 必须传CTF_SHOW,CTF_SHOW.COM 不能有fl0g 在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、、点、[转换为下划线,但是用一个特性是可以绕过的,就是当[提前出现后,…...
pta L1-002 打印沙漏
L1-002 打印沙漏 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中…...

【简单讲解下PHP AES加解密示例】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

设计模式总结-外观模式(门面模式)
外观模式 模式动机模式定义模式结构外观模式实例与解析实例一:电源总开关实例二:文件加密 模式动机 引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦…...

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤
LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…...
es6:set()和weakset()
一、Map() 1.1 简介 ES6 提供了 Set 数据结构,它类似于数组,但是值是唯一没有重复的。 我们可以通过 new Set()去创建它。 1.2. Set的创建、设置与获取 <script> const set new Set(); console.log(set.add(1)); //Set { 1 } …...

C#仿OutLook的特色窗体设计
目录 1. 资源图片准备 2. 设计流程: (1)用MenuStrip控件设计菜单栏 (2)用ToolStrip控件设计工具栏 (3)用StatusStrip控件设计状态栏 (4)ImageList组件装载树节点图…...

Jmeter的使用
Jmeter的使用 1.Jmeter简介 以下内容来自Jmeter中文网http://www.jmeter.com.cn/jieshao,很好的解释了Jmeter的作用: Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试…...
【蓝桥杯第十届省赛B】(部分详解)
特别数的和 #include <iostream> #include <string> using LLlong long; using namespace std;int main() {LL n;cin >> n;LL cnt 0;for (LL i 1; i < n; i) {string s to_string(i);for (LL j 0; j < s.size(); j) {if (s[j] 2 || s[j] 0 || s…...

计算机研究生规划
一、计算机研究生技术栈 两条腿走路: 左侧工程实践能力:要掌握python编程语言,它和机器学习、神经网络(这两门几乎是必须掌握的技能)的学习有很大关系 右侧学术创新能力 二、编程语言能力提升 左边基础,右边教你写…...
针孔相机、鱼眼相机、全景相机
先进性简述,后续慢慢会补充1. 针孔相机: 针孔相机是一种基于针孔成像原理的传统相机,它使用一个非常小的孔径(即“针孔”)来限制光线进入相机的方式。 这种相机通常具有简单的结构,由一个孔径较小的光学元…...

HTML5+CSS3+JS小实例:圣诞按钮
实例:圣诞按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…...

【深度学习基础】
打基础日常记录 CNN基础知识1. 感知机2. DNN 深度神经网络(全连接神经网络)DNN 与感知机的区别DNN特点,全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】4. CNN应用于文本 RNN基础1. RNN的本质 词向量模型word2Vec1. 自然语言…...

银行业架构网络BIAN (Banking IndustryArchitecture Network)详细介绍
BIAN ( The Banking Industry Architecture Network) 是一个业界多方协作的非营利性组织,由全球领先银行、技术提供商、顾问和学者组成,定义了一个用以简化和标准化核心银行体系结构的银行技术框架。这一框架基于面向服务的架构 (SOA) 原则,银…...

[尚硅谷 flink] 基于时间的合流——双流联结(Join)
文章目录 8.1 窗口联结(Window Join)8.2 **间隔联结(Interval Join)** 8.1 窗口联结(Window Join) Flink为基于一段时间的双流合并专门提供了一个窗口联结算子,可以定义时间窗口,并…...

怎样恢复已删除的照片?教你3个方法,一键恢复!
很多人喜欢以拍照的形式记录生活,手机里的照片就很容易堆积成山,但当内存不够用时就不得不选择删除。可是这些美好的照片始终是很多人心中抹不去的记忆,那么该怎样恢复已删除的照片呢?下面几招,教你一键恢复࿰…...

植物糖基转移酶数据库-23年-地表最强系列-文献精读-6
pUGTdb: A comprehensive database of plant UDP-dependent glycosyltransferases pUGTdb:植物UDP依赖糖基转移酶的全面数据库 一篇关于植物糖基转移数据库的综述,地表最强,总结的最全面的版本之一,各位看官有推荐请留言评论区~…...

虚拟机打不开
问题 另一个程序已锁定文件的一部分,进程无法访问 打不开磁盘“G:\centeros\hadoop104kl\hadoop100-cl2.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机。 原因 前一次非正常关闭虚拟机导致.lck 文件是VMWare软件的一种磁盘锁文件&…...

MySQL数据库版本为5.5.62,时间戳超出2038年1月19日的解决方案
MySQL数据库版本是 5.5.62,已设置字段的类型为BIGINT,使用FROM_UNIXTIME()函数来转换时间戳,返回NULL。 SELECT FROM_UNIXTIME(1617970800)SELECT FROM_UNIXTIME(2185743121)MySQL数据库版本为5.5.62,已设置字段的类型为BIGINT&a…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...