LeetCode——(两种思路)将字符串中的空格替换为%20

在这里插入图片描述

#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

思路1:
遇到空格,就把后面的字符往后挪动两个位置。
问题:效率不高,时间复杂度O(N^2,所以不选用


思路2:
先遍历一遍计算出有多少个空格,再从前往后挪数据,把每个字符一步挪到位,
每个字符挪 spacenum*2.
遇到空格以后填%20,然后spacenum--;
时间复杂度为O(N);
选用思路2


代码如下:

void replaceSpace(char *str, int length)
{

	int spacenum = 0;
	int i = 0;

	for (; i < length; i++)
	{

		if (str[i] == ' ')
		{

			spacenum++;
			//i++;
		}
		
	}
	int end = length - 1;
	while (spacenum>0)
	{

			if (str[end] != ' ')
			{
				str[end + spacenum * 2] = str[end];
				end--;

			}
			else
			{
				str[end + spacenum * 2] = '0';
				str[end + spacenum * 2 - 1] = '2';
				str[end + spacenum * 2 - 2] = '%';
				end--;
				spacenum--;
			}
	}
}

在这里插入图片描述


int main()
{
	char arr[28] = "We are happy";
	int len = strlen(arr);
	replaceSpace(arr, len);
	printf("%s\n\n\n", arr);
	return 0;
}

运行结果:

在这里插入图片描述

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值