每日一刷——替换空格

题目描述:

请实现一个函数,将一个字符串中的每个空格替换成“%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];
			}
		}
	}
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【广州华锐互动】VR地铁消防逃生路线演练系统

随着城市轨道交通的不断发展&#xff0c;事故应急演练的重要性也越来越受到重视。而VR技术的应用&#xff0c;为地铁消防逃生路线演练带来了许多亮点&#xff0c;包括以下几个方面&#xff1a; 首先&#xff0c;VR技术可以提供高度真实的模拟场景。在传统的事故应急演练中&…

Lottie源代码解析

Lottie-iOS Lottie动画的原理&#xff1a; 一个完整动画View&#xff0c;是由很多个子Layer 组成&#xff0c;而每个子Layer主要通过shapes&#xff08;形状&#xff09;&#xff0c;masks&#xff08;蒙版&#xff09;&#xff0c;transform三大部分进行动画。Lottie框架通过…

【Linux】内存使用相关

free 命令 查看内存大小 free -g :G单位 free -h : 可读性较高较理解 free -m : MB单位 total: 总内存used: 正在运行的进程使用的内存(used total – free – buff/cache)free: 未使用的内存 (free total – used – buff/cache)shared: 多个进程共享的内存buffers: 内存保留…

linux安装mysql以及使用navicat连接mysql

目录 一、下载mysql 二、安装mysql 三、使用Navicat连接MySQL 四、常见问题 1、启动服务时报错 Failed to start mysql.service: Unit not found. 的解决方法。 2、登录过程出现&#xff1a;access denied for user’root’‘localhost’(using password:Yes) 的解决方…

常见的网络攻击

​ 1.僵木蠕毒 攻击业内习惯把僵尸网络、木马、蠕虫、感染型病毒合称为僵木蠕毒。从攻击路径来看&#xff0c;蠕虫和感染型病毒通过自身的能力进行主动传播&#xff0c;木马则需要渠道来进行投放&#xff0c;而由后门木马&#xff08;部分具备蠕虫或感染传播能力&#xff09;构…

一本通1919:【02NOIP普及组】选数

这道题感觉很好玩。 正文&#xff1a; 先放题目&#xff1a; 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid1919 描述 已知 n 个整数 x1,x2,…,xn&#xff0c;以及一个整数 k&#xff08;k&#…

Flutter——最详细(NavigationRail)使用教程

NavigationRail 简介 一个 Material Design 小部件&#xff0c;旨在显示在应用程序的左侧或右侧&#xff0c;以便在少量视图&#xff08;通常在三到五个视图之间&#xff09;之间导航。 使用场景&#xff1a; 通过Row属性&#xff0c;左侧或右侧菜单栏按钮 属性作用onDestinati…

Excel之VLOOKUP()函数介绍

Excel之VLOOKUP()函数介绍 Excel的VLOOKUP函数语法&#xff1a; VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) 参数说明&#xff1a; lookup_value&#xff1a;要查找的值或要比较的值。 table_array&#xff1a;包含要在其中进行查找的数据表的区…

[ 容器 ] Docker 基本管理

目录 一、Docker 概述1.1 Docker 是什么&#xff1f;1.2 Docker 的宗旨1.3 容器的优点1.4 Docker 与 虚拟机的区别1.5 容器在内核中支持的两种技术namespace的六大类型 二、Docker核心概念2.1 镜像2.2 容器2.3 仓库 三、安装 Docker四、docker 镜像操作五、 Docker 容器操作总结…

如何录音转文字:探寻声音的文字之舞

随着科技的飞速进步&#xff0c;人们对于信息的传递和记录变得越发便捷。在这个数字化时代&#xff0c;录音转文字技术无疑是一颗璀璨的明珠&#xff0c;它让声音和文字在交织中跳跃&#xff0c;为我们带来了新的感知和体验。在这篇文章中&#xff0c;我们将深入探讨录音转文字…

Python实现word简历中图片模糊

Python实现word简历中照片模糊——保护个人隐私的有效方法 一、引言背景 在现代招聘流程中&#xff0c;电子简历成为了主要的招聘方式之一。然而&#xff0c;简历中包含的个人信息往往涉及隐私问题&#xff0c;特别是照片。为了保护求职者的个人隐私和数据安全&#xff0c;许多…

Stable Diffusion生成图片参数查看与抹除

前几天分享了几张Stable Diffusion生成的艺术二维码&#xff0c;有同学反映不知道怎么查看图片的参数信息&#xff0c;还有的同学问怎么保护自己的图片生成参数不会泄露&#xff0c;这篇文章就来专门分享如何查看和抹除图片的参数。 查看图片的生成参数 1、打开Stable Diffus…

【密码学】一、概述

概述 1、密码学的发展历史1.1 古代密码时代1.2 机械密码时代1.3 信息密码时代1.4 现代密码时代 2、密码学的基本概念3、密码学的基本属性4、密码体制分类4.1 对称密码体制4.2 非对称加密体制 5、密码分析 1、密码学的发展历史 起因&#xff1a;保密通信和身份认证问题 根据时间…

Twisted Circuit

题目描述 输入格式 The input consists of four lines, each line containing a single digit 0 or 1. 输出格式 Output a single digit, 0 or 1. 题意翻译 读入四个整数 00 或者 11&#xff0c;作为如图所示的电路图的输入。请输出按照电路图运算后的结果。 感谢PC_DOS …

推荐一款在win、mac、android之间传递文件或消息的软件,LocalSend,前提需要在同一网络下

官方地址 https://github.com/localsend/localsend/releases/download/v1.10.0/LocalSend-1.10.0.dmg 可选择不同的设备进行发送接收&#xff0c;超级好用

etcd实现大规模服务治理应用实战

导读&#xff1a;服务治理目前越来越被企业建设所重视&#xff0c;特别现在云原生&#xff0c;微服务等各种技术被更多的企业所应用&#xff0c;本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结&#xff0c;同时结合当前较火的分布式开源kv产品etcd&#xff0c;…

hybridCLR热更遇到问题

报错1&#xff1a; No ‘git‘ executable was found. Please install Git on your system then restart 下载Git安装&#xff1a; Git - Downloading Package 配置&#xff1a;https://blog.csdn.net/baidu_38246836/article/details/106812067 重启电脑 unity&#xff1a;…

docker容器引擎(一)

docker 一、docker的理论部分docker的概述容器受欢迎的原因容器与虚拟机的区别docker核心概念 二、安装docker三、docker镜像操作四、docker容器操作 一、docker的理论部分 docker的概述 一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源再Linux容…

UML 图

统一建模语言&#xff08;Unified Modeling Language&#xff0c;UML&#xff09;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图…

力扣 406. 根据身高重建队列

题目来源&#xff1a;https://leetcode.cn/problems/queue-reconstruction-by-height/description/ C题解1&#xff1a;分别对h和k两个维度进行考虑&#xff0c;我这里是优先考虑k值&#xff0c;k值相同的时候h小的排前面。然后再一一遍历&#xff0c;对于people[i]&#xff0c…