替换空格( replace方法、字符数组、StringBuilder)

替换空格

题目描述:

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

示例 1:

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

限制:

0 <= s 的长度 <= 10000


解题思路:

这道题其实不难,运用java来做有很多种方法,无非就是把字符串 s 中的每个空格替换成"%20"而已。

方法一(java replace方法):

这个方法极其简单!

replace() 方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。

语法

public String replace(char oldChar,
                      char newChar)

参数

  • oldChar – 原字符。
  • newChar – 新字符。

返回值

替换后生成的新字符串。

代码:

class Solution {
    public String replaceSpace(String s) {
          return s.replace(" ","%20");
    }
}

方法二(字符数组):

首先,创建字符数组 array,其长度为 s.length() * 3,初始化 size0size 表示替换后的字符串的长度;

接着遍历字符串 s,获得 s 的当前字符 c,判断如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3,如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1;

最后,遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串。

复杂性分析

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

代码:

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

方法三(StringBuilder):

**首先,**初始化一个 StringBuilder ,记为 res

**然后,**遍历列表 s 中的每个字符s.charAt(i)
s.charAt(i)为空格时:向 res 后添加字符串 “%20”;
s.charAt(i)不为空格时:向 res 后添加字符s.charAt(i)
**最后,**将列表 res 转化为字符串并返回。

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

代码:

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

本文地址:https://blog.csdn.net/weixin_43508822/article/details/107357695

猜你喜欢