1.题目说明
请实现一个函数,替换字符串中的空格为‘%20’
2.解题思路
假如运行我们可以开辟新的数组来存放替换后的字符串,那么将会很容易实现。
设置两个指针分别指向新旧字符串的首位置。
遍历原字符串,如果没有遇到空格,复制即可。如遇到,则填充替换物即可。
如果要求我们在原来的字符串上操作,并且保证原字符串有足够的长度来存放替换后的字符串。
如果从前遍历替换,那么每遇到一个空格,后面的字符串都得向后移动两位。
假设字符串的长度为n,这样的话其时间复杂度为O(n2).
从后往前遍历,统计出字符串的空格数。这样每替换一个空格,长度增加2。
所以替换后的字符串的长度 = 原字符串长度 + 2*空格数。
两个指针P1,P2分别指向原和新的字符串末尾位置。
若P1指向的内容补位空格,则把该内容复制给P2所指的位置。
反之,这赋值%20。
当两个指针所指的位置相同时,说明所有的空格都替换完毕。
3.代码实现
class Solution {
public:
void replaceSpace(char *str,int length) {
if (str == NULL || length == 0)
return;
int spaceNum=0;
int i;
for( i=0;str[i]!='\0';i++)
{
if (str[i] == ' ')
spaceNum++;
}
int k =i+2*spaceNum;
if (k > length)
return;
str[k]='\0';
int p1= i-1;
int p2= k-1;
while(p1>=0 && p2>p1)
{
if(str[p1] == ' ')
{
str[p2--]='0';
str[p2--]='2';
str[p2--]='%';
}
else
{
str[p2--]=str[p1];
}
p1--;
}
}
};
4.编程总结
字符串的长度和有效长度 以及 结尾为 '\0' 反斜杠 不是斜杠 。
if 语句后的 括号
i--和 --1的区别
有时候还是忘了写 封号 ;