题目:
题解1:
正常思路,不考虑空间复杂度,重新开一个string,碰到space就加一个“%20”。
时间复杂度:O(n)
空间复杂度:O(n)
题解2:
在原本的字符串上做修改,resize扩容后,从尾部开始复制,不会消除前面的元素。
时间复杂度:O(n)
空间复杂度:O(1)
代码:
class Solution {
public:
string replaceSpace(string s) {
int len = s.size();
int number = 0;
//遍历一遍,获取到空格的数目
for(int i=0;i<len;i++)
{
if(isspace(s[i]))number++;
}
s.resize(len+2*number);//重新定容
auto it_end = s.end()-1;
auto it_pre = s.end()-1-2*number;
while(it_end != it_pre)
{
if(!isspace(*it_pre))
{
*it_end = *it_pre;
}
else
{
*it_end ='0';
*(it_end-1)='2';
*(it_end-2)='%';
it_end -= 2;
}
it_end--;
it_pre--;
}
return s;
}
};