程序员面试金典 1.3

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值