[每日一题] 第十题:替换空格

题目描述

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

示例 1:

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

限制:

  • 0 <= s 的长度 <= 10000

题解

方法一:字符数组

由于每次替换从 1 个字符变成 3 个字符,使得字符数组可方便的进行替换,建立字符数组的长度为 s 的长度的 3 倍,这样可以保证字符数据可以容纳所以替换后的字符。

  • 获得 s 的长度 length
  • 创建字符数组 array,其长度为 length * 3
  • 初始化 size=0size 表示替换后字符串的长度
  • 从左到右遍历字符串 s

个人理解

  1. 获取字符串的单个元素使用 s.charAt() 方法。
  2. char 数组替换为 string 数组有如下方法 public String(char value[], int offset, int count)
  3. 下标移动:遇到空格的时候,要移动是三个下标。
  4. 在 Java 等语言中,字符串都被设计成不可变的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。

方法二:append

  1. 初始化一个 StringBuilder,记为 res

  2. 遍历字符串 s 中的每个字符 c

    1. c 为空格时:向 res 后添加字符串 "%20";
    2. c 不为空格时:向 res 后添加字符 c
  3. 将列表 res 转化为 String 类型并返回。

代码

class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray())
        {
            if(c == ' ') res.append("%20");
            else res.append(c);
        }
        return res.toString();
    }
}

个人理解

  1. Character: Character 类用于对单个字符进行操作。Character 类在对象中包装一个基本类型 char 的值。
  2. StringBuilder: StringBuilder 是一个可变对象,可以预分配缓冲区,这样,往 StringBuilder中新增字符时,不会创建新的临时对象。
  3. 类型转换: 记得最后要将 StringBuilder 类型结果转化为 String 类型。

复杂度分析

  • 时间复杂度O(N): 遍历使用 O(N),每轮添加(修改)字符操作使用 O(1)。
  • 空间复杂度O(N): Java 新建的 StringBuilder 使用了线性大小的额外空间。

题解来源

作者:jyd
链接:leetcode-cn.com/problems/ti-huan-k...
来源:力扣(LeetCode)

来源

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/ti-huan-k...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!