每日一刷——替换空格

news2024/11/25 13:09:46

题目描述:

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

我的思路:从左向右循环遍历字符串,定义一个空串。如果遇到空格,将空格替换成"20%"并添加到一个新的字符串中,否则将字符添加到新的字符串中。时间复杂度:O(n),空间复杂度O(n)。
不好之处:这样移动的次数多。

str1 = input()
# 方法1:遍历所有,并另外开辟一个空字符串
# 时间复杂度:O(n),空间复杂度O(n)
def replaceBlank(string1):
    string2 = ""
    string3 = "%20"
    for i in range(len(string1)):
        if string1[i] == ' ':
            string2 = string2 + string3
        else:
            string2 = string2 + string1[i]
    return string2
# 先判断该字符串是否为空,养成良好的习惯,对其进行判空操作
if len(str1) == 0:
            return False
str2 = replaceBlank(str1)
print(str2)

查看别人的思路,发现别人都是从右向左倒着遍历的,别人的解析:如果从左向右遇到空格,会将原来的字符覆盖。所以,就考虑了从右向左,如果遇到空格,就填充"20%",否则将原字符移动应该待的位置。
从前往后和从后往前的区别:
从后往前,每个空格后面的字符只需要移动一次。从前往后,当遇到第一个空格时,要移动第一个空格后的所有字符一次;当遇到第二个空格时,要移动第二个空格后所有的字符一次;以此类推,总的移动次数会更多。

下面列一下来自牛客的官方解题思路,我虽然明白了这个思路,但是由于 python 的字符串是不可变的,一旦创建,就不能修改它的值(注意:使用“+”运算符连接字符串时,两个字符串之间不能有空格,否则会报错),如果要对其进行再增加长度,相当于又重新新建一个字符串对象,那我更倾向于我上面的第一种解决方案。
(1)length 用于记录原字符串的长度,new_length 用于记录结果字符串的长度;
图片1
(2)当 str[length] 不等于空格,就复制,将指针向前移动。
图2
(3)当 str[length]等于空格,将空格变成 “20%”。
图片3
重复上述的步骤,直到结束。

分享的代码是由 C++ 编写的。
时间复杂度O(n),空间复杂度O(1)。

class Solution {
public:
	void replaceSpace(char *str,int length) {
		// 判空操作
		if(str == nullptr || length <= 0) return;
		int countb = 0;
		// 计算字符串中有多少个空格
		for(int i=0; i<length; ++i)
		{
			if (str[i] == ' ')
			{
				++countb;
			}
		}
		// 如果没有空格,直接返回
		if( countb==0 ) return;
		int new_length = length + countb*2;
		// 当i==new_length时,说明前面已经没有空格了,可以节约一定的时间
		for(int i = length-1; i>=0 && i!=new_length; --i){
			if(str[i] == ' '){
				str[--new_length] = '0';
				str[--new_length] = '2';
				str[--new_length] = '%';
			}
			else{
				str[--new_length] = str[i];
			}
		}
	}
};

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

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

相关文章

Ubuntu18.04 拯救者R9-7945HX 4060 配置ZED 2i代双目相机驱动+ORBSLAM2

AMD的拯救者网卡很拉&#xff0c;研究了很久除了换网卡可以解决网络问题&#xff0c;其它没找到合适的办法&#xff0c;这里我用手机USB共享网络的方式勉强上网&#xff0c;这里不得不说华为的信号桥很好用。 之前在1050ti的电脑上布置过&#xff0c;很顺利&#xff0c;这个新…

SDUT 2023 summer team contest(for 22) - 1-Gym - 102220

B - Balanced Diet 题意&#xff1a;这题题意有点难搞啊&#xff0c;就是有n个物品&#xff0c;一个有m种&#xff0c;对于第 i 种物品如果你要买它就至少买 l[i]个&#xff0c;然后就是给你n行&#xff0c;每行两个数&#xff0c;ai,bi,表示这个糖果类型为bi&#xff0c;价值为…

STM32学习笔记(十三)丨USART通用同步/异步收发器(串口外设的基本使用丨串口发送数据、串口发送+接收数据)

本篇文章包含的内容 一、STM32的USART外设1.1 STM32的USAER外设简介1.2 USART外设的结构和工作原理1.3 串口通信数据帧1.4 起始位侦测和USART的噪声判断机制1.5 波特率发生器 二、串口发送和接收数据包2.1 HEX数据包2.2 文本数据包2.3 固定包长HEX数据包接收2.4 可变包长文本数…

chrome edge svg转png

chrome edge svg转png 生成SVG blockdiag Live Preview 导出png 截图&#xff1a; 左上角截取屏幕截图

零售EDI:True Value EDI 需求分析

True Value 是一家享有盛誉的卖场&#xff0c;经营范围广泛&#xff1a;包括家居用品、工具、园艺用品等。据悉&#xff0c;True Value 已将 EDI 纳入其供应商评级中。 True Value 将 EDI 作为对其供应商的一项要求&#xff0c;这意味着如果你希望与 True Value 建立合作关系&a…

uniapp 小程序 联想地址搜索

效果图&#xff1a; qqmap-wx-jssdk.js下载 <template><view class"items"><view class"items-text">地址&#xff08;必填&#xff09;</view><input type"text" placeholder"搜索地址" maxlength&quo…

SQL-每日一题【585.2016年的投资】

题目 Insurance 表&#xff1a; 请你编写一个 SQL 查询&#xff0c;报告 2016 年 (tiv_2016) 所有满足下述条件的投保人的投保金额之和&#xff1a; 他在 2015 年的投保额 (tiv_2015) 至少跟一个其他投保人在 2015 年的投保额相同。他所在的城市必须与其他投保人都不同&#…

Revit中如何添加剖面?快速实现剖面图

一、Revit中如何添加剖面&#xff1f; 除了标高绘制所得到的楼层平面视图和立面视图之外&#xff0c;还可以添加剖面视图&#xff0c;这样可以得到任意位置一个竖向的剖切面&#xff0c;例如在楼梯细节处理中&#xff0c;楼梯处于建筑物内部&#xff0c;立面也看不到整个楼梯的…

pdf怎么翻译?有这个工具就够了

pdf怎么翻译&#xff1f;PDF文档一直是我们日常生活和工作中不可避免的一部分。但是&#xff0c;当我们需要翻译PDF文件时&#xff0c;我们往往会感到无助&#xff0c;因为PDF文档不能像其他文本文件一样直接复制和粘贴。那么今天就给大家介绍一款可以帮助我们进行PDF翻译的工具…

Pytorch框架中各文件的作用

新人在接触Pytorch以及深度学习等领域时&#xff0c;面对一个开源的代码可能无从下手&#xff0c;一个Pytorch框架相对比较负责&#xff0c;文件也多&#xff0c;其中的逻辑不免让初学者感到不知所措&#xff0c;下面大致梳理一下Pytorch各文件夹的作用和逻辑&#xff0c;其中的…

基于 Orbit 的云原生应用交付基础原则与良好实践

本文作者&#xff1a;何文强——腾讯云 CODING 高级架构师。 负责 CODING DevOps产品解决方案架构设计和技术产品布道以及 CODING 云原生技术研究与落地实践。在多个技术大会担任演讲嘉宾&#xff0c;腾讯云 CODING DevOps 课程认证出品人&#xff0c;腾讯云云原生训练营核心初…

上市公司Git分支管理规范

Git分支管理策略 主分支Master 首先&#xff0c;代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本&#xff0c;都在这个主分支上发布。 Git主分支的名字&#xff0c;默认叫做Master。它是自动建立的&#xff0c;版本库初始化以后&#xff0c;默认就是在主…

ASEMI快恢复二极管MUR20100CT尺寸, MUR20100CT体积

编辑-Z MUR20100CT参数描述&#xff1a; 型号&#xff1a;MUR20100CT 最大峰值反向电压(VRRM)&#xff1a;1000V 最大RMS电压(VRMS)&#xff1a;700V 最大直流阻断电压(VDC)&#xff1a;1000V 平均整流正向电流(IF)&#xff1a;20A 非重复峰值浪涌电流(IFSM)&#xff1a…

Revit中墙体的问题,门窗洞口及柱断梁墙

一、如何同时开两道相邻墙的门窗洞口 做外墙装饰的时候&#xff0c;我们很经常为了方便、简洁在已经绘制好的墙体外围再绘制一面墙体&#xff0c;并且添加上材质作为外饰面&#xff0c;提高工作效率;但是遇到有门窗洞口的墙体时&#xff0c;外饰面墙体却没办法直接被门窗剪切&a…

LeetCode142.环形链表II

142.环形链表II 目录 142.环形链表II一、哈希表二、双指针 一、哈希表 和141题.判断链表是否有环类似&#xff0c;区别在于141题只要求判断链表中是否有环&#xff0c;该题则要求我们返回入环节点 一个非常直观的思路&#xff1a;遍历链表中的每个节点&#xff0c;并将它们记…

【论文】基于GANs的图像文字擦除 ——2010.EraseNet: End-to-End Text Removal in the Wild(已开源)

pytorch官方代码&#xff1a;https://github.com/lcy0604/EraseNet 论文&#xff1a;2010.EraseNet: End-to-End Text Removal in the Wild 网盘提取码&#xff1a;0719 一、图片文字去除效果 图10 SCUT-EnsText 真实数据集的去除 第一列原图带文字、第二列为去除后的标签&a…

【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】

目录 前言 1.冒泡排序 1.1冒泡排序动图 1.2冒泡排序源代码 1.3冒泡排序的特性总结 2.快速排序&#x1f451; 2.1hoare版本实现思想 排序前 排序中 排序后 2.2hoare版本快排源代码 2.3分析先走 情况1&#x1f947; 情况2&#x1f948; 前言 交换类排序两个常见的排…

7月31日起,这类产品将禁止在亚马逊美国站销售!

亚马逊美国站发布公告称由于口腔胶带&#xff08;睡眠胶带&#xff09;在睡觉时存在潜在危险&#xff0c;出于对消费者的安全考虑&#xff0c;任何睡眠胶带产品的listing将在亚马逊商店下架&#xff0c;以下是公告内容&#xff1a; 自2023年7月31日起&#xff0c;口腔胶带&…

Docker 应用容器引擎

Docker 应用容器引擎 一、Docker是什么二、Docker安装和查看1、docker安装2、docker版本信息查看3、docker信息查看 三、镜像操作四、容器操作1、容器创建2、创建并启动容器3、容器的进入4、复制5、容器的导入和导出6、删除容器 一、Docker是什么 是一个开源的应用容器引擎&…

Java遍历集合方法分析(实现原理、算法性能、适用场合)

Java遍历集合方法分析&#xff08;实现原理、算法性能、适用场合&#xff09; 概述 java语言中&#xff0c;提供了一套数据集合框架&#xff0c;其中定义了一些诸如List、Set等抽象数据类型&#xff0c;每个抽象数据类型的各个具体实现&#xff0c;底层又采用了不同的实现方式…