剑指Offer05.替换空格 c++

剑指Offer05.替换空格

写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点

1.扩容+倒序遍历+双指针 3

  • 首先计算有多少个空格,然后对数组进行扩容,然后反向遍历原数组,判断是空格填入替换,不是的话填入原数组

class Solution {
public:
    string replaceSpace(string s) {
        int l1 = s.length() - 1;//获取字符串长度
        for (int i = 0; i <= l1; i++) {
            if (s[i] == ' ') {
                s += "00";//注意这里的双引号,如果是多个字符就要用双引号
            }
        }
        int l2 = s.length() - 1;
        if (l2 <= l1) {
            return s;
        }//如果扩容后无变化,说明原来无空格不需要更换
        for (int i = l1; i >= 0; i--) {
            char c = s[i];
            if (c == ' ') {
                s[l2--] = '0';
                s[l2--] = '2';
                s[l2--] = '%';
            } else {
                s[l2--] = c;
            }
        }
        return s;
    }
};

2.新建string

  • 新建一个string,利用c++特性,遇到空格就输入

class Solution {
public:
    string replaceSpace(string s) {
            string ans;
            for (auto i:s){//使用auto&代表可以改变值,
                if(i==' ') {
                    ans.push_back('%');
                    ans.push_back('2');
                    ans.push_back('0');//push_back不能插入“%20”
                }
                else{
                    ans.push_back(i);
                }
            }
            return ans;
    }
};

时间复杂度/空间复杂度分析/面试场景如何作答

  • 首先询问面试官是否是在原字符串修改,能否保证有足够的空间后面容量是否够,选择不同方法

知识点及反思

  1. string相关操作string相关操作
  2. c++中单引号和双引号区别
  3. auto 与 auto& 区别
  4. 不清楚小知识点,可以在代码里做个小实验,搞清楚,程序员嘛
  5. 发现还是要看一下剑指offer这本书,尤其是对于我这种转行的人来说
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值