【双指针】替换空格

原题连接:https://www.acwing.com/problem/content/description/17/

在这里插入图片描述

class Solution {
public:
    string replaceSpaces(string &str) {
        
        // 最暴力的做法,时间快。
        // string res;
        // int len = str.length();
        
        // int j = 0;
        // for(int i = 0; i < len; i ++)
        // {
        //     if(str[i] == ' ')
        //     {
        //         res += "%20";
        //     }
        //     else
        //         res += str[i];
        // }
        
        // return res;
        
        // 使用双指针,节省空间,但是费时间
        // 参考y总的题解:https://www.acwing.com/solution/content/704/
        int len0 = str.length();
        
        int len = 0;
        for(int i = 0; i < str.length(); i ++)
            if(str[i] == ' ') 
                len += 3;
            else len ++;
        
        str.resize(len);
        
        // 这个是先进循环,执行一次之后才判断,所以会SG
        // for(int j = len - 1, i = len0 - 1; i; i --)
        // {
        //     if(str[i] == ' ')
        //     {
        //         str[j --] = '0';
        //         str[j --] = '2';
        //         str[j --] = '%';
        //     }
        //     else
        //         str[j --] = str[i];
        // }
        
        // 这个是先判断,所以j不会越界。
        int i = len0 - 1, j = len - 1;
        while (i >= 0)
        {
            if (str[i] == ' ')
            {
                str[j -- ] = '0';
                str[j -- ] = '2';
                str[j -- ] = '%';
            }
            else str[j -- ] = str[i];
            i -- ;
        }
        
        
        return str;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值