思路:
-
扩容
将原来的字符串长度扩大到可以装下替换的之后的长度
1个’ ’ 替换为’%20‘ 即一个空格本身有一个字节,还需2个字节,即m个空格,需要2m长度
即newSize = originSize + 2m; -
从后往前 双指针p,q开始赋值
当p>=0 并且 p<q时一直循环处理
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
string replaceSpace(string s) {
// write code here
//字符串从后到前替换i
int blankNum = 0;
int sz = 0;
for(char c : s)
{
if(c==' ')
{
++blankNum;
}
++sz;
}
int extendNum = 2 * blankNum;
for(int i=0;i<extendNum;++i)
s.push_back(' ');
int p = sz-1;
int q = sz+extendNum-1;
while(p>=0 && p<q)
{
if(s[p]!=' ')
{
s[q--] = s[p--];
}
else
{
s[q--] = '0';
s[q--] = '2';
s[q--] = '%';
--p;
}
}
return s;
}
};