【18】替换空格

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 题目:实现一个函数,把字符串中的每个空格替换成"%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;
}


目录
相关文章
|
3月前
|
人工智能 前端开发 IDE
Cursor 3.1 更新:智能体窗口终于「摊平」了,说话即编程!
Cursor 3.1重磅更新!平铺布局支持多智能体分屏协作,语音输入2.0实现高准度实时转写,新增分支预选防误操作,Diff跳转+文件筛选提升代码审查效率。真实场景驱动,丝滑体验拉满——懂开发者,更懂痛点。(239字)
524 0
|
7月前
|
人工智能 数据可视化 测试技术
2025年接口错误自动分析工具对比与测试平台选型指南
文章聚焦2025年接口错误自动分析工具与测试平台选型。介绍工具发展趋势、行业需求背景,分析核心痛点及解决方案类型。对比商业平台(如优测)、开源工具链(如Postman + 脚本)、AI驱动平台的特点、优势与适用场景,还给出选型建议、报告关键信息及必须依赖自动分析的场景。
|
监控 NoSQL Redis
Redis Sentinel:秒杀系统背后的可靠性保障神器!
本文详细介绍了如何在个人项目中利用 Redis 哨兵模式保障系统的可靠性与高可用性。哨兵模式通过监控主从服务器状态、自动故障转移和通知客户端等功能,确保在主服务器宕机时系统仍能正常运行。适用于读请求多于写请求的场景,如秒杀系统,能有效缓解数据库压力。同时也探讨了哨兵模式在高并发场景下的优化方法及潜在缺陷,帮助开发者更好地应用该模式。
474 8
Redis Sentinel:秒杀系统背后的可靠性保障神器!
|
机器学习/深度学习 人工智能 Linux
SAM 2.1:Meta 开源的图像和视频分割,支持实时视频处理
SAM 2.1是由Meta(Facebook的母公司)推出的先进视觉分割模型,专为图像和视频处理设计。该模型基于Transformer架构和流式记忆设计,实现了实时视频处理,并引入了数据增强技术,提升了对视觉相似物体和小物体的识别能力。SAM 2.1的主要功能包括图像和视频分割、实时视频处理、用户交互式分割、多对象跟踪以及改进的遮挡处理能力。
1818 6
SAM 2.1:Meta 开源的图像和视频分割,支持实时视频处理
|
存储 小程序 API
深入调查研究Memos
【11月更文挑战第1天】
810 7
|
API
FreeRTOS入门教程(队列详细使用示例)
FreeRTOS入门教程(队列详细使用示例)
1047 0
|
JavaScript 开发者
Element UI & Element Plus之改变表格单元格颜色
这篇文章展示了如何在Element UI和Element Plus框架中使用`:cell-style`属性来根据条件改变表格单元格的颜色。
2065 0
Element UI & Element Plus之改变表格单元格颜色
|
机器学习/深度学习 人工智能 算法
深入探索TensorFlow在强化学习中的应用:从理论到实践构建智能游戏AI代理
【8月更文挑战第31天】强化学习作为人工智能的一个重要分支,通过智能体与环境的互动,在不断试错中学习达成目标。本文介绍如何利用TensorFlow构建高效的强化学习模型,并应用于游戏AI。智能体通过执行动作获得奖励或惩罚,旨在最大化长期累积奖励。TensorFlow提供的强大工具简化了复杂模型的搭建与训练,尤其适用于处理高维数据。通过示例代码展示如何创建并训练一个简单的CartPole游戏AI,证明了该方法的有效性。未来,这项技术有望拓展至更复杂的应用场景中。
383 0
|
资源调度 Kubernetes Cloud Native
德邦证券BizDevOps最佳实践:打造科技型投行和财富管理平台
在数字化转型的浪潮的席卷下,德邦证券正思考如何更进一步地将业技进行结合以更好地支撑业未来发展的需求。
3242 3
德邦证券BizDevOps最佳实践:打造科技型投行和财富管理平台
|
运维 监控 数据可视化
可观测性和传统监控的三大区别
可观测性和传统监控的三大区别
1053 0