[leetcode]——替换空格

本文介绍了一种高效的字符串空格替换算法,通过预计算替换后字符串的长度并使用辅助空间进行字符移动,避免了多次字符移动带来的效率损失,提高了算法性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们拿到这样一道题的时候最简单的方法是当字符串遇到空格时我们将空格替换为百分之20,但是空格是一个字符,而我们所要替换的%20为三个字符,这样如果我们有俩个空格我们就要把字符移动俩次,这样从效率上来说并不是很高。
所以我们想到可以计算出替换后字符串的长度,创建一个辅助空间让字符一个一个移动到新建的空间上来,这样虽然创建了辅助空间但是从效率上来说就比前一种方法好的很多

#include<stdio.h>
void my_replaceBlank(char string[], int len)
{
	int originallen = 0;//原字符串长度
	int originalblank = 0;//原字符串空格
	int newstringlen = 0;//新字符串长度
	int oror = 0;//源字符串最后一个字符下标
	int ornew = 0;//新字符串最后一个字符下标
	int i = 0;
	if((string == NULL) && len <= 0)
	{
		return ;
	}
	while(string[i] != '\0')
	{
		originallen++;
		if(string[i] == ' ')
		{
			originalblank++;//统计有多少空格
		}
		i++;
	}
	newstringlen = originallen + originalblank * 2;//每多一个空格新字符串长度应该多加2
	oror = originallen;
	ornew = newstringlen;
	while((oror >= 0) && (ornew > oror))
	{
		if(string[oror] == ' ')
		{
			string[ornew--] = '0';
			string[ornew--] = '2';
			string[ornew--] = '%';

		}
		else
		{
			string[ornew--] = string[oror];
		}
		oror--;
	}

	
}
int main()
{
	char str[20] = "we are happy";
	int sz = sizeof(str)/sizeof(str[0]);	
	my_replaceBlank(str, sz);
	printf("%s",str);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值