题目的主要信息:
  • 将一个字符串s中的每个空格替换成“%20”
  • 保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种
举一反三:

学习完本题的思路你可以解决如下题目:

JZ73. 翻转单词序列

方法:字符串截取相加(推荐使用)

具体做法:

我们可以用下标遍历字符串,每次检查下标所在位置的字符是否为空格,如果不是空格,下标继续往后,如果是空格则调用substr函数将字符串从空格前后截断,然后中间添加"%20"后相连即可。

图示:

图片说明

Java实现代码:

import java.util.*;
public class Solution {
    public String replaceSpace (String s) {
        StringBuilder str = new StringBuilder();
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == ' ')
                str.append("%20");
            else
                str.append(s.charAt(i));
        }
        return str.toString();
    }
}

C++实现代码

class Solution {
public:
    string replaceSpace(string s) {
        string res = "";
        //遍历字符串
        for(int i = 0; i < s.length(); i++){ 
            //非空格直接复制
            if(s[i] != ' ') 
                res += s[i];
            //空格就替换
            else 
                res += "%20"; 
        }
        return res;
    }
};

Python实现代码:

class Solution:
    def replaceSpace(self , s: str) -> str:
        res = ""
        #遍历字符串
        for i in s:
            #非空格直接复制
            if i != ' ': 
                res += i
            #空格就替换
            else:
                res += "%20" 
        return res

复杂度分析:

  • 时间复杂度:O(n)O(n),其中nn为字符串长度,遍历一次字符串
  • 空间复杂度:O(1)O(1),无额外辅助空间使用,拼接的字符串属于必要空间