替换空格(替换特定字符)

img

😀前言
在字符串处理中,经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题:将字符串中的空格替换成 “%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),退出。

f7c1fea2-c1e7-4d31-94b5-0d9df85e093c (1)

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连支持一下,创造不易您们的支持是我的动力🤞

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

也说说Sybase ASE中的空间膨胀及应对方案

前言 直观来讲,数据库是典型的以空间换时间的思路去提高数据检索的效率。我们先把数据“入”进去,组织好,建好索引,都为了什么?相当大一部分只不过是为了最终能快速得到查询的结果。当然这又引发了好多子项,比如,怎么“入”得快而又不发生冲突,怎么在相对少的资源的情…

OpenCV中的模块:三维重建-SFM(2)

接上一篇文章,本篇将介绍SFM模块在windows平台上的编译。与Ubuntu下的过程类似,主要过程也是依赖库的下载、编译及安装,不同点是:与Ubuntu直接安装不同,windows下我们将对库的依赖关系更加清晰。 1. 依赖库的编译 打开相应库的最外层CMakeLists.txt所在的目录,库的编译过…

机器学习_PySpark-3.0.3文本特征提取(TF-IDF)流程

机器学习_PySpark-3.0.3文本特征提取(TF-IDF)流程 本例中 Tokenizer 是用于分词的模块。 本例中 HashingTF().tranform() 函数把词哈希成特征向量, 返回结果是 Vectors.sparse() 类型的。 本例中 IDF 类用于计算给定文档集合的反文档频率, 是一个词普遍重要性的度量 (即: 一…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(八)- 向量整数算术指令

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

Linux 内核的构建块:深入探索 C 结构体的应用

Linux 内核的构建块&#xff1a;深入探索 C 结构体的应用 Linux 内核&#xff0c;作为操作系统的中心和基础&#xff0c;承担着调度处理器、管理内存、处理输入/输出&#xff08;I/O&#xff09;等各种底层任务。要实现这些复杂的功能&#xff0c;内核的编写借助了 C 语言强大…

SAP FICO接口-OA-调取SAP供应商明细接口(应付预付明细)开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

需求说明: 根据OA查询条件查询ZVACDOCAZVACDOCA-BUKRS=查询公司代码; ZVACDOCA- LIFNR=查询供应商代码; ZVACDOCA-BELNR=查询凭证编号; ZVACDOCA-GJAHR=查询会计年度; ZVACDOCA-AWKEY=查询采购发票号*; ZVACDOCA-BLART≠W* ZVACDOCA-AUGBL=空 ZVACDOCA- XREVERSED…

ShrewSoft VPN无法连接.报错failed to attach to key daemon的解决方案

今天突然发现使用的ShrewSoft VPN 软件来连接公司网络。但是连接过程中&#xff0c;报错 “Fail to attach to key daemon” 解决步骤&#xff1a; 1. 重启电脑&#xff0c;可以解决90%问题。 2. 可能和ShrewSoft 相关的服务没有启动有关。 于是检查服务状态。 2.1 按Wind…

中国省级基础设施网络完善进程:2000-2022年数据分析与展望(无缺失值)

01、数据介绍 基础设施&#xff0c;作为为社会生产和居民生活提供公共服务的物质工程设施&#xff0c;是一个用于保证社会经济活动正常进行的公共服务系统。它不仅包括交通设施&#xff0c;还涵盖了邮电、供水供电、商业服务、科研与技术服务、园林绿化、环境保护、文化教育、…

富格林:明示虚假现象确保安全

富格林认为&#xff0c;当下的金融市场&#xff0c;投资者进行理财时都会特别关注盈利效率高的产品&#xff0c;而近来兴起的现货黄金则以此优势吸引着大批人关注。不过现货黄金市场相对于其他投资市场来说&#xff0c;会复杂一点不乏会蕴含着虚假现象。因此要确保我们的交易安…

Linux诊断机器故障工具—dmesg命令

在 Linux 系统中&#xff0c;经常会遇到各种各样的故障和问题&#xff0c;这些问题可能会导致系统性能下降、服务异常甚至系统崩溃。而 dmesg 命令是一个强大的工具&#xff0c;可以帮助我们诊断和解决这些故障。我们将介绍如何使用 dmesg 命令来分析和解决 Linux 系统中的常见…

基于单片机分舱式电开水炉位控制系统

**单片机设计介绍&#xff0c;基于单片机分舱式电开水炉位控制系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机分舱式电开水炉位控制系统概要主要涉及通过单片机对电开水炉的各个舱位进行精确控制&#xff0c;实现水位、温度…

Impala Daemon无法启动问题记录(25000端口被占用)

前言&#xff1a;集群主节点根目录内存快爆了&#xff0c;开始清理主节点内存重启组件&#xff0c;发现Kerberos认证的角色用户都过期了&#xff0c;又重新生成了一下角色&#xff0c;在启动impala组件过程中&#xff0c;其中一个Impala Daemon组件启动失败。 集群版本&#xf…

【热门话题】Stable Diffusion:本地部署教程

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stable Diffusion&#xff1a;本地部署教程一、引言二、环境准备1. 硬件配置2. …

在 Docker 部署的 MySQL 容器内安装和使用 vim

在 Docker 部署的 MySQL 容器内安装和使用 vim 文章目录 在 Docker 部署的 MySQL 容器内安装和使用 vim步骤一&#xff1a;进入 MySQL 容器步骤二&#xff1a;更新软件源和安装 vim步骤三&#xff1a;验证 vim 安装步骤四&#xff1a;使用 vim 进行文件编辑步骤五&#xff1a;保…

springboot项目框架讲解

文章目录 1.项目文件结构2.数据库连接信息3.其他配置信息4.java代码文件目录介绍5.entity层代码6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系7.controller层代码8.登陆拦截功能实现9.文件上传功能 1.项目文件结构 2.数据库连接信息 3.其他配…

Linux中的网络命令深度解析与CentOS实践

Linux中的网络命令深度解析与CentOS实践 在Linux系统中,网络命令是管理和诊断网络问题的关键工具。无论是网络管理员还是系统开发者,熟练掌握这些命令都是必不可少的。本文将深入探讨Linux中常用的网络命令,并以CentOS为例,展示这些命令的具体应用。 一、ping命令 ping命…

大模型日报2024-04-06

大模型日报 2024-04-06 大模型资讯 Anthropic研究揭示大型语言模型存在安全漏洞 摘要: AI初创公司Anthropic的最新研究发现&#xff0c;大型语言模型&#xff08;LLMs&#xff09;存在漏洞&#xff0c;这些漏洞可能会使AI的安全训练措施失效。研究指出&#xff0c;尽管进行了安…

ETL中如何自定义规则

一、ETL中的规则 在使用规则之前我们先来了解一下什么是规则&#xff0c;ETL中规则在很多组件中都能看见&#xff0c;可以理解为按照事前约定好的逻辑去执行&#xff0c;规则可以使得数据更加的规范统一&#xff0c;同时也不需要去纵向的修改底层代码&#xff0c;只需要动态编…

【Frida】【Android】 工具篇:查壳工具大赏

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

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、不记录指定…