算法入门04替换空格

Posted 2021dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法入门04替换空格相关的知识,希望对你有一定的参考价值。

核心考点:字符串相关,特性观察,临界条件处理

请实现一个函数,将一个字符串中的每个空格替换成"%20"。例如,字符串We Are Happy经过替换之后的字符串为We%20Are%20Happy。

解析:
替换空格大致可分为以下三个步骤:
1、遍历一遍字符串,统计字符串当中的空格数count。

2、通过空格数count算出替换后字符串的新长度newlength。
因为一个空格字符会被替换为三个字符,所以替换后字符串的新长度newlength = length + 2*count。

3、从后向前对字符串进行填充。
计算出替换后字符串的长度后,我们可以在原字符串当中,从后往前进行填充。若遇到的不是空格,则将遍历到的字符从后往前进行填充。

若遇到的是空格,则从后往前填充字符’0’,‘2’,’%’。

如此进行下去,直到字符串遍历完毕即可得到替换后的字符串。

class Solution {
public:
	void replaceSpace(char *str, int length) {
		int count = 0; //记录字符串中空格的个数
		//遍历字符串,统计字符串当中的空格数
		for (int i = 0; i < length; i++)
		{
			if (str[i] == ' ')
				count++;
		}
		//计算替换后字符串的新长度
		int newlength = length + 2 * count;
		//从后向前对字符串进行填充
		while (newlength >= 0)
		{
			if (str[length] == ' ') //遇到的是空格,则从后往前填充字符'0','2','%'
			{
				str[newlength--] = '0';
				str[newlength--] = '2';
				str[newlength--] = '%';
			}
			else //遇到的不是空格,则将遍历到的字符从后往前进行填充
			{
				str[newlength--] = str[length];
			}
			length--;
		}
	}
};

说明一下:
因为所给函数接口没有使用引用传参,所以我们无法在函数体内部对字符串进行增容操作,在此我们只能将参数length理解为需要我们进行替换的字符串长度,而默认字符串已经为我们预留了足够的空间大小进行空格替换。

以上是关于算法入门04替换空格的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门经典 例题 3-4 回文串

[PHP]算法-替换空格的PHP实现

替换空格算法分析

替换空格算法分析

常见面试中的算法解法

《算法竞赛入门经典》3.3最长回文子串