题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
循环移动
每遇到空格就将后面的字符串向后移动2个单位,循环移动。
时间复杂度O(n2),空间复杂度O(n)。
class Solution {
public:
void replaceSpace(char *str,int length) {
for (int i = 0; i < length; ++i)
{
if (str[i] == ' ')
{
for (int j = length + 1; j > i + 2; j--)
{
str[j] = str[j - 2];
}
str[i] = '%';
str[i + 1] = '2';
str[i + 2] = '0';
length += 2;
}
}
}
};
记录索引填值
先遍历一遍记录空格的个数,然后计算扩容后的尾部索引,设置原字符串尾部索引。从后往前添加值
- 如果是空格,往前添加
%20
- 赋值原字符串相应位置字符
时间复杂度O(n),空间复杂度O(n)。
class Solution {
public:
void replaceSpace(char *str,int length) {
int cnt = 0;
for (int i = 0; i < length; ++i)
{
if (str[i] == ' ')
{
cnt++;
}
}
int oldIdx = length;
int newIdx = length + 2 * cnt;
// 从最后一个字符'\n'开始
while (newIdx >= 0 && oldIdx >= 0)
{
if (str[oldIdx] == ' ')
{
str[newIdx--] = '0';
str[newIdx--] = '2';
str[newIdx--] = '%';
}
else
{
str[newIdx--] = str[oldIdx];
}
oldIdx--;
}
}
};