面试题04_替换空格_剑指Offer系列

题目描写叙述

请实现一个函数,将一个字符串中的空格替换成“%20”。

比如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。


解题思路

这样的题目从前往后扫描的话。须要移动多次。

这样的情况下从后往前扫描。

首先扫描一遍。找到空格的个数,算出须要加入多少个20%,即替换后的字符串的长度 = 原字符串长度 +  空格数*2

准备两个指针一个指针p1指向当前字符串的最后位置,还有一个指针p2指向新字符串的最后位置。

然后依次向前扫描。当遇到空格的时候。p1向前移动一个位置,p2向前移动三个位置,而且依次用20%替换。


代码实现

class Solution {
public://注意:length是整个字符串的总容量 包含未占用的空间
	void replaceSpace(char *str, int length) {
		//首先推断边界条件,如空啥的
		if (str == nullptr || length <= 0)
			return;
		int originLen = 0;
		int numOfblank = 0;
		int i = 0;
		while (str[i] != '\0')
		{
			originLen++;
			if (str[i] == ' ')
				numOfblank++;
			i++;
		}
		int newLen = originLen + numOfblank * 2; 
		if (newLen > length)
			return;
		
		while (originLen >= 0 && newLen > originLen)
		{
			if (str[originLen] == ' ')
			{
				str[newLen--] = '0';
				str[newLen--] = '2';
				str[newLen--] = '%';
			}
			else
				str[newLen--] = str[originLen];
			originLen--;
		}
	}
};



posted @ 2017-08-16 08:45  gccbuaa  阅读(137)  评论(0编辑  收藏  举报