非原地解法:较为简单。
时间复杂度O(n)
空间复杂度O(n)
class Solution {
public:
string replaceSpace(string s) {
string res;
for(string::iterator p = s.begin(); p != s.end(); ++p){
if(*p == ' ')
res += "%20";
else
res += *p;
}
return res;
}
};
原地解法
java和python字符串不可变,所以不能用)
复杂度分析
时间复杂度O(n)
空间复杂度O(1)
代码
class Solution {
public:
string replaceSpace(string s) {
int len = s.size(), space_count = 0;
//更新空格数
for(char c : s)
space_count += c == ' ';
//修改数组长度为改变后的长度
s.resize(len + 2 * space_count);
//i指向原字符串尾部,j指向当前字符串尾部。i和j相等时说明左边没有空格,结束循环
for(int i = len - 1,j = s.size() - 1; i < j; i--,j--){
//如果不是空格,放到该放的位置
if(s[i] != ' ')
s[j] = s[i];
//如果是空格,添加%20
else{
s[j - 2] = '%';
s[j - 1] = '2';
s[j] = '0';
//上面还要再减一个1,所以不是减3
j -= 2;
}
}
return s;
}
};