题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:如果从字符串头开始查找,遇到空格替换为“%20”,对于每个空格,需要移动后面o(n)个字符,如果含有o(n)个空格,则后面需移动o(n^2),所以总的时间复杂度为o(n^2)。 所以我们先遍历字符串,找出所有的空格个数n,然后从字符串尾开始,先将最后一个单词向后移动2n位,然后前面的单词依次向后移动,最终的时间复杂度为o(n)。
代码:
class Solution {
public:
void replaceSpace(char *str,int length) // 输入字符串和内存长度
{
if(str==NULL||length<=0) //判断字符串是否为空,且内存长度不能为0
return;
int i=0;
int str_length= 0;
int replacenumber= 0;
while(str[i]!='\0')
{
str_length++; //原字符串长度
if(str[i]==' ')
{
replacenumber++; //空格个数
}
i++;
}
int oldlength=str_length; //原字符串长度
int newlength=str_length+2*replacenumber; //替换空格后的字符串长度
if(newlength>length)
return;
while(oldlength>=0&&oldlength<newlength)
{
if(str[oldlength]==' ') // 遇到空格替换为"20%"
{
str[newlength--]='0';
str[newlength--]='2';
str[newlength--]='%';
}
else
{
str[newlength--]=str[oldlength]; //赋值字符串内容到新字符串
}
oldlength--;
}
}
};