【18】替换空格

简介: 题目:实现一个函数,把字符串中的每个空格替换成"%20",例如输入"we are happy.",则替换后输出"we%20are%20happy."方案一:朴素做法是枚举字符串,每次找到一个字符串把当前空格后面的字符串往后移动2个,再把%20插入。


题目:实现一个函数,把字符串中的每个空格替换成"%20",例如输入"we are happy.",则替换后输出"we%20are%20happy."


方案一:朴素做法是枚举字符串,每次找到一个字符串把当前空格后面的字符串往后移动2个,再把%20插入。这样每次枚举一个字符可能就要移动n个字符,总的n个字符,时间复杂度O(n^2),效率低


方案二:1.先利用O(n)的时间求出字符串中所有的空格的个数,这样就可以求出替换后总的字符串长度

               2. 然后从后往前枚举字符,如果不是空格,则依次把字符存放在最终的位置上,遇到空格的时候就填上%20

               3. 例如字符串"we are happy.",总的空格数为2,则最后字符串长度为17

                   从后往前枚举字符串,第一个是y直接填入第17个位置,然后是p,依次.....

                   直到遇到空格的时候往前填入0、2、%,然后继续枚举字符串

               这个方法的时间复杂度O(n),比起朴素算法效率高了很多

#include<iostream>
#include<algorithm>
using namespace std;

void ReplaceBlank(char *string){
	//如果是空串直接返回
	if(string == NULL){
	   return;
	}
	//求字符串的空格数
	int length = strlen(string);
	int blankCount = 0;
	for(int i = 0; i < length; i++){
		if(string[i] == ' '){
		   ++blankCount;
		}
	}
	//新的字符串的长度
	int newLength = length+2*blankCount;
	//新的字符串
	string[newLength] = '\0';
	int pos = newLength-1;
	for(int i = length-1; i >= 0; i--){
		if(string[i] != ' '){
		   string[pos] = string[i];
		   --pos;
		}
		else{
		   string[pos--] = '0';
		   string[pos--] = '2';
		   string[pos--] = '%';
		}
	}
}

int main(){
    //样例
	char string[] = "we are happy.";
	ReplaceBlank(string);
	cout<<string<<endl; //输出we%20are%20happy.

	return 0;
}


目录
相关文章
|
机器学习/深度学习 供应链 TensorFlow
使用Python实现深度学习模型:智能物流与供应链管理
【8月更文挑战第1天】 使用Python实现深度学习模型:智能物流与供应链管理
674 2
使用Python实现深度学习模型:智能物流与供应链管理
|
监控 Devops Docker
如何在DevOps中更好地使用python
如何在DevOps中更好地使用python
530 7
|
弹性计算 并行计算 双11
阿里云服务器多少钱一年?2024年11月最新价格表,爆款配置清单
2024年双十一期间,阿里云推出多款优惠云服务器配置。最便宜的轻量应用服务器2核2G、3M带宽、50GB ESSD云盘,仅需36元一年;ECS云服务器2核2G、3M带宽、40GB ESSD Entry云盘,99元一年;ECS u1实例2核4G、5M带宽、80GB ESSD Entry盘,199元一年。更多配置详见官网。
1445 0
|
监控 安全 Java
【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )
1087 1
|
人工智能 自然语言处理 机器人
我们用GLM-4-Plus搞了个“阅读智能体”,工作效率提升了300%
近期,大模型领域不断传来新消息。9月中旬,OpenAI悄然发布o1模型预览版,随后智谱推出了包括最新旗舰模型GLM-4-Plus在内的多个更新。GLM-4-Plus在语言理解、长文本处理及时序问答方面表现出色,清华大学基础模型研究中心测评显示其综合能力全球前三。通过API接口,GLM-4-Plus可解决实际工作中的多种问题,如财务报告分析、信息提取及视频脚本生成等,显著提升效率。此外,智谱还计划与硬件开发者合作,拓展更多应用场景。
470 0
|
机器学习/深度学习 人工智能 算法
深入探索TensorFlow在强化学习中的应用:从理论到实践构建智能游戏AI代理
【8月更文挑战第31天】强化学习作为人工智能的一个重要分支,通过智能体与环境的互动,在不断试错中学习达成目标。本文介绍如何利用TensorFlow构建高效的强化学习模型,并应用于游戏AI。智能体通过执行动作获得奖励或惩罚,旨在最大化长期累积奖励。TensorFlow提供的强大工具简化了复杂模型的搭建与训练,尤其适用于处理高维数据。通过示例代码展示如何创建并训练一个简单的CartPole游戏AI,证明了该方法的有效性。未来,这项技术有望拓展至更复杂的应用场景中。
368 0
|
数据可视化 物联网 程序员
使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
3d建筑,3d消防,消防演习模拟,3d库房,3d档案室,3d密集架,webGL,threejs,3d机房,bim管理系统
6419 0
|
存储 MySQL 关系型数据库
|
弹性计算 关系型数据库 PHP
构建云上个人博客:ECS、RDS与WordPress的快速搭建与优化指南
本指南将带您探索如何快速搭建个人博客,从开通ECS和RDS,到软件部署(Apache、PHP、WordPress)及WordPress配置优化,展示从零开始搭建具有稳定性和性能的个人博客之路。
1056 4
|
Ubuntu Linux 网络安全
【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透(一)
【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透
858 0