题目链接
方法1:模拟
模拟替换的过程,当我们遇到空格的时候用“%20”代替即可
时间复杂度:遍历了整个字符串,为O(n)
空间复杂度:一个字符串O(n)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    string replaceSpace(string s) {
        string res = "";//这是用来储存答案的串
        for (int i = 0; i < s.size(); i ++ ) {
            if (s[i] == ' ') res += "\%20";//注意了,要输出"%"要用转义字符
            else res += s[i];
        }
        return res;
    }
};

方法2:用string函数
有一个函数叫string.replace(),这里介绍一下它常用的几个用法
1、用str替换从pos开始长度为len的字符

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s = "abc abc abc";
    cout << s << endl;
    while (s.find(" ") != s.npos) {
        s = s.replace(s.find(" "), 1, "\%20");
    }
    cout << s << endl;
}

运行结果
图片说明
2、用str替换迭代器的起始位置到结束位置的字符

#include <iostream>
#include <string>
int main() {
    std::string s = "abc abc abc";
    std::cout << s << std::endl;
    s = s.replace(s.begin(), s.begin() + 2, "123");
    std::cout << s << std::endl;
}

运行结果
图片说明
3、用重复了n次的str字符替换从pos开始长度为len的字符

#include <iostream>
#include <string>
int main() {
    std::string s = "abc abc abc";
    std::cout << s << std::endl;
    char str = '#';
    s = s.replace(s.begin(), s.begin() + 2, 3, str);
    std::cout << s << std::endl;
}

运行结果
图片说明
对于本题,我们用第一种
时间复杂度:遍历了整个字符串,为O(n),由于是给你封装好了的,带了一点小常数
空间复杂度:一个字符串O(n)

class Solution {
public:
    string replaceSpace(string s) {
        while (s.find(" ") != s.npos) {当字符串中还有" "的时候,find函数返回第一个目标字符串出现的下标
            s = s.replace(s.find(" "), 1, "\%20");
        }
        return s;
    }
};