1.题意
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
示例:当字符串为“We Are Happy”,则经过替换之后的字符串为“We%20Are%20Happy”。
2.思路
顺序遍历字符串,统计字符串的总长度strLen和空格的个数numberOfBlank。
替换后字符串的总长度为newLength = strLen + 2 * numberOfBlank。
从字符串的后面开始复制和替换,两个指针 i 和 j ,分别指向原字符串和新生成字符串的末尾。
向前移动 i 如果 i 指向的位置不是空格,直接复制字符到 j 处,如果 i 为空格,j 及其前面的两个位置替换为“%20”
时间复杂度:
3.实现
class Solution {
public:
void replaceSpace(char *str,int length) {
//这里的length字符数组str的总容量
if(str == nullptr || length <= 0)
return;
int strLen = 0;
int numOfBlank = 0;
while(str[strLen] != '\0')
{
if(str[strLen] == ' ')
numOfBlank++;
strLen++;
}
int newLength = strLen + numOfBlank * 2;
if(length < newLength)
return; //超出容量
int i = strLen;
int j = newLength;
while(i < j && i >= 0)
{
if(str[i] != ' ')
str[j--] = str[i];
else
{
str[j--] = '0';
str[j--] = '2';
str[j--] = '%';
}
i--;
}
}
};