剑指Offer 05.替换空格

问题:读题又不仔细。。。。以为直接用 ' % ‘ 替代空格。。。。。

完全未设想的思路:

双指针!天哪,,,双指针真的好灵活。。

双指针还是得搞清楚两个指针究竟干嘛的

 i 指向的是原数组的下标

j 指向的是新数组的下标

步骤:

学到的:

 1.扩容方法:resize 函数,意识是需要将数组的大小变为多大 s.resize()

2. 数组填充类问题:数组进行扩容修改的时候,先扩容,然后从后向前遍历

好处:

1.不用移动数组

2.不用申请新的数组

注意点:

 1. 注意扩容的大小,增加的是两倍的空格数量  2 * count

2.在 后面双指针移动的时候,如果 i 遇到了空格,j额外填充两个格子,所以在填充完需要  j-=2

注意填充的时候是逆序填充的哈

二刷:

1. 注意终止条件

2.扩容的个数

3. 双指针是根据扩容前和扩容后来指的

class Solution {
public:
    string replaceSpace(string s) {
        int count = 0;
        int oldSize = s.size();      // i 起始位置
        for(int i = 0; i < s.size(); i++)
        {
            if(s[i] == ' ')
                count++;
        }

        // 扩容
        s.resize(s.size() + 2 * count);
        int  newSize = s.size();   // j 起始位置
        int   i = oldSize - 1, j = newSize - 1;
        for(; i < j; j--,i--)
        {
            if(s[i] != ' ')
                s[j] = s[i];
            else
            {
                s[j] = '0';
                s[j - 1] = '2';
                s[ j - 2] = '%';
                j -= 2; 
            }
        }
        return s;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值