《剑指offer》替换空格

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:[email protected]


题目链接:http://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking


题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。


思路

按照最直观的做法,正序找下来,每次遇到空格就将后面的字符往后移动,这种方法的时间复杂度是O(N^2),明显不够理想。

那么我们可以反向思考,我们首先可以统计出空格的数目,那么我们就能知道整个串最后的长度究竟是多少,然后我们再从尾到头一个个字符来进行移动,当遇到空格的时候进行替换,那么我们就可以在O(N)的时间复杂度内解决了。


class Solution
{
	public:
		void replaceSpace(char *str,int len)
		{
			int space = 0;
			for(int i = 0; i<len; i++)
			{
				if(str[i]==' ')
					space++;
			}
			int newlen = len+2*space-1;
			for(int i = len-1; i>=0; i--)
			{
				if(i==newlen) //没有空格了 
					break;
				if(str[i]==' ') //空格替换 
				{
					str[newlen--] = '0';
					str[newlen--] = '2';
					str[newlen--] = '%%';
				}
				else
				{
					str[newlen--] = str[i];
				}
			}
		}
};


你可能感兴趣的:(剑指offer)