URLify:写一个程序,将字符串中的空格替换为%20
,可以假设字符串尾部有足够的空间,输入参数还包括字符串的实际长度。
一个比较常见的解法就是将字符向尾部移动。因为尾部有足够的空间,所以不用担心会覆盖原始字符。
通过两次遍历可以实现这种解法。第一次遍历计算空格的数量,然后乘3
(原文错误,应该是2
)就可以算出需要的额外空间。第二次遍历从原始字符串尾部开始,如果是空格,就用%20
替换,否则直接拷贝到正确的位置。
注:要在新字符串末尾加上空字符,或者减少缓冲区长度才行。
class Solution {
public:
string replaceSpaces(string S, int length) {
int cnt = 0, newPos;
for(int i = 0; i < length; i++)
{
if(S[i] == ' ') cnt++;
}
newPos = length + (cnt << 1);
S.resize(newPos);
for(int i = length - 1; i >= 0; i--)
{
if(S[i] == ' '){
S[newPos - 1] = '0';
S[newPos - 2] = '2';
S[newPos - 3] = '%';
newPos -= 3;
}
else S[--newPos] = S[i];
}
return S;
}
};