剑指 Offer 05. 替换空格

leetcode链接:
https://leetcode.cn/problems/ti-huan-kong-ge-lcof/

题目分析

既然java已经提供看相关的功能函数,那就直接使用,冲

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

结果

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:39.4 MB,击败了66.34% 的Java用户

有史以来写的行数最少、最短的代码。

言归正传

尝试通过自己编写函数去实现:

方案一

一种时间复杂度和空间复杂度都特别高的方案,极度不推荐但是我还是写出来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public String replaceSpace(String s) {
String result = "";

for (char c: s.toCharArray()) {
if (' ' == c) {
result = result + "%20";
} else {
result = result + c;
}
}
return result;
}
}

结果

解答成功:
执行耗时:6 ms,击败了4.25% 的Java用户
内存消耗:40.9 MB,击败了5.02% 的Java用户

方案二

https://leetcode.cn/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-ji-jian-qing-xi-tu-/

查看官方题解,得,对String相关的函数理解与使用不到位,导致做出了方案一。

Java StringBuffer 和 StringBuilder 类相关内容的学习与补充。
https://www.runoob.com/java/java-stringbuffer.html

相较于String, StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder是线程不安全的,Java 5 提出
StringBuffer是线程安全的,但是运行速度没用StringBuilder快

多数情况建议使用 StringBuilder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();
}
}

作者:jyd
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-ji-jian-qing-xi-tu-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

剑指 Offer 05. 替换空格
http://yuanql.top/2023/06/14/02_leetcode/剑指 Offer 05. 替换空格/
作者
Qingli Yuan
发布于
2023年6月14日
许可协议