题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
我的思路:就很直接地从前往后遍历,没遇到一个空格,就先将其后面的字符向后移动,再将空格替换。代码如下:
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 + 1; --j) {
str[j + 2] = str[j];
}
str[i] = '%';
str[i + 1] = '2';
str[i + 2] = '0';
i = i + 2;
length += 2;
}
}
}
};
还来看了一下别人的代码,发现有更简单的方法:先从前向后计算空格的个数,然后改变 length 的长度;再从后向前遍历,如不是空格,则复制原字符,否则替换空格。这样只需 O(n)。