剑指 Offer 05. 替换空格

题目

在这里插入图片描述

分析

原地修改

  • 先记录原来的字符串长度
  • 遍历字符串找到其中的空格
  • 根据字符串中的空格数量*2来扩展字符串长度
  • 两个指针,一个指向新字符串末尾,一个指向旧字符串末尾
  • 如果不是空格
    • 将新指针指向字符赋值给就指针指向字符
  • 如果时空格
    • 将新指针赋值为0
    • 新指针减一赋值为2
    • 新指针减二赋值为%

代码

class Solution {
public:
    string replaceSpace(string s) {
        int oldlen = s.length();//先记录原来的字符串长度
        if (oldlen <= 0)
        {
            return "";
        }
        int spaceCount = 0;
        //遍历字符串找到其中的空格
        for (auto ch : s)
        {
            if (ch == ' ')
            {
                spaceCount++;
            }
        }
        //根据字符串中的空格数量*2来扩展字符串长度  
        s.resize(oldlen + spaceCount * 2);
        //两个指针,一个指向新字符串末尾,一个指向旧字符串末尾
        //旧指针比零小说明字符串遍历完了,新指针大于旧指针时也说明遍历完了
        for (int i = oldlen - 1, j = s.length() - 1; 
              i < j && j >= 0; i--,j--)
        {
            if (s[i] == ' ')
            {
                s[j--] = '0';
                s[j--] = '2';
                s[j] = '%';
            }
            else
            {
                s[j] = s[i];
            }
        }
        return s;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值