字符串知识-双指针法
字符串扩容 而非新建数组,节省空间。从后往前移动,节省时间。
class Solution {
public:
string replaceSpace(string s) {
if (s.size() == 0) return "";
int oldSize = s.size();
int numberOfBlank = 0;
int i = 0;
//计算源字符串中空格数
while(s[i] != '\0'){
if (s[i] == ' '){
++numberOfBlank;
}
++i;
}
//扩充字符串s的大小,也就是每个空格替换成“%20”之后的大小
s.resize(oldSize + numberOfBlank*2);
int newsize=s.size();
//从后向前将空格替换成“%20”
for (int newP=newsize-1,oldP=oldSize-1; oldP < newP; newP--,oldP-- ){
if (s[oldP] != ' '){
s[newP] = s[oldP];
}else{
s[newP] = '0';
s[--newP] = '2';
s[--newP] = '%';
}
}
return s;
}
};