题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
刚开始开始没搞懂length的意思,length为str的总长度。
个人感觉这个题目有点问题,有点没搞清楚测试用例是怎么设计的。就当学习学习思路了。
整体思路为:将字符串扩容,从最后的字符开始复制,如果遇到的不是空格则原样复制,否则是空格则用"%20"替代。
AC代码
class Solution {
public:
//开始没搞懂length的意思,length为str的总长度
void replaceSpace(char *str, int length) {
if (str == NULL || length <= 0)
return;
int spaceCount = 0;
int originLen = 0;
for (int i = 0; str[i] != '\0'; ++i)
{
++originLen;
if (str[i] == ' ')
++spaceCount;
}
//新的长度
int newLen = originLen + spaceCount * 2;
if (newLen + 1 > length) //为什么要加1,是因为考虑'\0'
return;
int i = originLen, j = newLen;
while (i>=0 && j>i)
{
//如果不等于空格,则原样复制
if (str[i] != ' ')
{
str[j] = str[i];
j--;
i--;
}
else //str[i] == ' '
{
str[j--] = '0';
str[j--] = '2';
str[j--] = '%';
i--;
}
}
}
};