题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
如果从前开始替换,那么没替换一次,该空格之后的就需要整体移动一次,时间复杂度为O(n^2)。采用如下的方法:
1、先遍历一次,得到空格的个数count;
2、可以计算出替换之后的长度为length+count*2
3、从后向前复制,遇到空格替换为“%20”
这样时间复杂度为O(n)
void replaceSpace(char *str,int length) {
if(NULL == str)
{
return;
}
int i=0;
int count = 0;
for(i=0; i<length; i++)
{
if(str[i] == ' ')
{
count++;
}
}
int len = length+count*2; //替换之后的长度
while(length >= 0)
{
str[len] = str[length];
if(str[len] == ' ')
{
str[len] = '0';
str[--len] = '2';
str[--len] = '%';
}
len--;
length--;
}
}