今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题05. 替换空格

题目链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/

一、题目描述

请实现一个函数,把字符串 s 中的每个空格替换成”%20″。

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

  • 0 <= s 的长度 <= 10000

二、题目解析

这题还是挺简单的。

遍历字符串中的每个字符,如果不是空格,直接赋值过去数组中;否则,赋值 %20 过去数组中。最后,从数组中的前 size 个字符创建新字符串,并返回新字符串。

三、动画描述

四、图片描述

面试题05. 替换空格.001

面试题05. 替换空格.002

面试题05. 替换空格.003

面试题05. 替换空格.004

面试题05. 替换空格.005

面试题05. 替换空格.006

面试题05. 替换空格.007

面试题05. 替换空格.008

面试题05. 替换空格.009

面试题05. 替换空格.010

面试题05. 替换空格.011

面试题05. 替换空格.012

面试题05. 替换空格.013

面试题05. 替换空格.014

面试题05. 替换空格.015

面试题05. 替换空格.016

面试题05. 替换空格.017

面试题05. 替换空格.018

面试题05. 替换空格.019

五、参考代码

//来源:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-by-leetcode-solutio/
class Solution {
    public String replaceSpace(String s) {
        //获取字符串 s 的长度 length
        int length = s.length();
        //创建字符数组 array,其长度为 length * 3
        char[] array = new char[length * 3];
        //初始化 size 为 0,size 表示替换后的字符串的长度
        int size = 0;
        //从左到右遍历字符串 s
        for (int i = 0; i < length; i++) {
            //获得 s 的当前字符 c
            char c = s.charAt(i);
            //如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3
            if (c == ' ') {
                array[size++] = '%';
                array[size++] = '2';
                array[size++] = '0';
            } else {
                array[size++] = c;
            }
        }
        //遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串
        String newStr = new String(array, 0, size);
        return newStr;
    }
}

六、复杂度分析

时间复杂度

时间复杂度为 O(n),遍历字符串 s 一遍。

空间复杂度

空间复杂度:O(n),额外创建字符数组,长度为 s 的长度的 3 倍。

七、相关标签

  • 字符串
  • 数组