替换空格

题目描述

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

示例 1:

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

限制:
0 <= s 的长度 <= 10000

题目链接

Leetcode

题目解答

解法一

使用String内置replaceAll()方法,只需一行代码就能完成题目要求,但实际测试时间性能表现一般。

时间复杂度:$O(n)$ 空间复杂度:$O(n)$

1
2
3
4
5
class Solution {
public String replaceSpace(String s) {
return s.replaceAll(" ", "%20");
}
}

执行用时:3 ms, 在所有 Java 提交中击败了15.63%的用户
内存消耗:36.3 MB, 在所有 Java 提交中击败了46.79%的用户

解法二

使用String内置toCharArray()方法,我们可以得到一个字符数组,遍历这个数组,如果元素是空格就把需要替换的字符串添加到StringBuilder中,否则直接添加当前字符。

时间复杂度:$O(n)$ 空间复杂度:$O(n)$

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public String replaceSpace(String s) {
StringBuilder sb = new StringBuilder();
for (char ch : s.toCharArray()) {
if (ch == ' ') {
sb.append("%20");
} else {
sb.append(ch);
}
}
return sb.toString();
}
}

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:36.1 MB, 在所有 Java 提交中击败了90.12%的用户

解法三

除了上述两种处理方式,我们也可以通过初始化字符数组来构造字符串,需要注意的是,如果遇到空格,需要同时往字符数组中添加替换串拆解之后的3个字符。

时间复杂度:$O(n)$ 空间复杂度:$O(n)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public String replaceSpace(String s) {
int len = s.length(), size = 0;
char[] chs = new char[len * 3];
for (int i = 0; i < len; i++) {
char ch = s.charAt(i);
if (ch == ' ') {
chs[size++] = '%';
chs[size++] = '2';
chs[size++] = '0';
} else {
chs[size++] = ch;
}
}
return new String(chs, 0, size);
}
}

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:36.2 MB, 在所有 Java 提交中击败了77.09%的用户

-------------本文结束 感谢您的阅读-------------

文章对您有帮助,可以打赏一杯咖啡,鼓励我继续创作!