题目:
思路:
这个题我是直接另外用了一个字符串变量来存储,这样的话就另外需要O(n)的空间。
也可以直接在同一个字符串s上进行操作,不过那样的话就需要先对字符串的长度进行扩充。扩充可以调用库函数 resize()实现。当利用 resize()扩容后就是给字符串进行替换操作了,这里很容易想到可以用双指针的方法,但是如果双指针我们是从前往后移动的话,那么每次需要替换空格的时候都要把后面的数据往后挪3位,如此一来时间复杂度相当于就是O(n^2)了,那还不如再创一个字符串呢。。。所以,这里的小技巧是双指针从后往前移动,这样的话避免了需要移动字符的情况,时间复杂度也变成了O(n)。这个小技巧在其他题目中也可能用到,所以这里特意记录一下。
代码:
class Solution {
public:
string replaceSpace(string s) {
int end = 0;
string newstr = "";
while (end < s.size()) {
if (s[end] == ' ') {
newstr += "%20";
end++;
}
else {
newstr+= s[end];
end++;
}
}
return newstr;
}
};