【刷题记录】12.替换空格

158 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

题目来源:LeetCode>替换空格

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

示例 1:

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

限制:

0 <= s 的长度 <= 10000

二、思路分析:

  1. 当看见字符替换时,并不是简单使用java方法replaceAll即可,如果真是这样,那此题就失去了考察的意义,更为真实的题意,其实是想自行实现类似replaceAll内部的方法一样的思想。
  2. 可以使用字符数组的替换方式进行,把原字符串转换为字符数组,然后对数组每个元素进行遍历判断
  3. 当存在空格时,则对数据进行替换、后移操作,在此之前须创建一个新数组,对于新数组的长度,最长长度为原数组的3被,即假定原数组中全部都是空格。
  4. 主要的替换和后移代码:array[size] = '%',array[size + 1] = '2',array[size + 2] = '0'

三、AC 代码:

class Solution {
    public String replaceSpace(String s) {
        int sLength = s.length();
        char[] array = new char[sLength * 3];
        int size = 0;
        for (int i = 0; i < sLength; i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                array[size++] = '%';
                array[size++] = '2';
                array[size++] = '0';
            } else {
                array[size++] = c;
            }
        }
        String result = new String(array, 0, size);
        return result;
    }
}

时间复杂度:O(n)。

四、总结:

  1. 对参数的判断;
  2. 对是否有空格的判断;
  3. 每个空格替换后会使新字符串长度增加2;
  4. 注意字符串末尾的'\0'和越界问题;
  5. 从后往前插入字符,可使每个字符仅处理一次;