【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
请实现一个函数,将一个字符串中的空格替换成“%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];
}
}
}
};

本文介绍了一种高效的字符串处理方法,用于将字符串中的空格替换为%20,通过反向遍历和预估新字符串长度的方式实现了O(N)的时间复杂度。

被折叠的 条评论
为什么被折叠?



