【LeetCode刷题记录】10.URL化

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

一、题目描述:

题目来源:LeetCode-URL化

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

 

示例 1:

输入:"Mr John Smith ", 13

输出:"Mr%20John%20Smith"

示例 2:

输入:" ", 5

输出:"%20%20%20%20%20"  

提示:

字符串长度在 [0, 500000] 范围内。

二、思路分析:

思路一:

  1. 对字符串进行一次遍历,判断每个字符是否为空格
  2. 如果不是空格的话,则拼接加入到一个新的字符串中
  3. 如果是空格的话,则进行替换再拼接到新的字符串中
  4. 基于字符串的不断变化,此处可以使用StringBuilder进行求解

思路二:

  1. 可以直接使用java的方法replaceAll()进行实现

思路三:

  1. 题目描述需要使用字符数组实现,故可以将字符串先转为字符数组
  2. 首先生成一个长度为原字符串长度3被的字符数组
  3. 对字符串进行字符级别的循环判断
  4. 若字符不为空格,则直接加入到字符数组中
  5. 若为空格,则替换为'%' '2' '0' 后再加入到字符数组中
  6. 字符数组转为字符串返回输出

三、AC 代码:

思路一:

    public String replaceSpaces(String S, int length) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < length; i++) {
            char ch = S.charAt(i);
            if (ch == ' ') {
                result.append("%20");
            } else {
                result.append(ch);
            }
        }
        return result.toString();
    }
复制代码

思路三:

class Solution {
    public String replaceSpaces(String S, int length) {
        char[] resultChars = new char[length * 3];
        int index = 0;
        for (int i = 0; i < length; i++) {
            char c = S.charAt(i);
            if (c == ' ') {
                resultChars[index++] = '%';
                resultChars[index++] = '2';
                resultChars[index++] = '0';
            } else {
                resultChars[index] = c;
                index++;
            }
        }
        return new String(resultChars, 0, index);
    }
}
复制代码

四、总结:

  1. 直接使用String的API效率是比较差的,只是提供一种思路
  2. 字符数组需要提前规定好长度,但是如此也存在一定的空间浪费

Guess you like

Origin juejin.im/post/7076042548942209032