一、问题描述:
剑指 Offer 05. 替换空格
难度简单252
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
通过次数411,677
提交次数542,027
二、思路:
这道题首先xin麒是想到先使用一个ArrayList<Character>类型的arraychar变量来逐个添加s的字符数组里面的每一个元素,如果是空格的则替换为添加%20的每一个字符。最后再通过一次遍历将arraychar的元素举逐个添加到字符数组里面,最后返回该字符数组的对应的字符串。
三、题解:
题解1:
class Solution {
public String replaceSpace(String s) {
ArrayList<Character> arraychar = new ArrayList<>();
for (char c :s.toCharArray()) {
if (c == ' '){
arraychar.add('%');
arraychar.add('2');
arraychar.add('0');
}else {
arraychar.add(c);
}
}
char[] chars = new char[arraychar.size()];
for (int i = 0; i < arraychar.size(); i++) {
chars[i] = arraychar.get(i);
}
return String.valueOf(chars);
}
}
运行:

同样,如果xin麒是将通过调用函数,那么效率也是没有降低:

而对于内存的消耗就稍微优化了些。
旧知识巩固与深入(有待探究):
xin麒一开始并不是这样子做的;题解1的思路是一开始想到的,但是怕效率低下,于是想到了题解2的思路。题解2的思路是构造一个空字符串t;遍历s的每一个字符时,判断一下是否为空格,如果是,则t += "%20";反之,直接添加遍历到的元素。
但是xin麒在实现2的同时,感觉题解2的思路不一定是最优的,因为之前学字符串的添加时xin麒知道字符串的添加可能会更加费时。后面果然是费时了。xin麒在对于字符串的+=操作是看过源码的,不过忘记细节了,得后面找个时间钻一下源码再完善一下。
题解2(xin 麒的题解1可以beat 100%,但是题解2无法beat 100%)
class Solution {
public String replaceSpace(String s) {
String t = "";
for (char c :s.toCharArray()) {
if (c == ' '){
t += "%20";
}else {
t += c;
}
}
return t;
}
}
运行6 ms,才beat 5%左右。

本文探讨了一种高效解决LeetCode剑指Offer05问题的方法,通过ArrayList优化字符替换操作,对比了两种替换策略,并分析了字符串操作的内存优化。
533

被折叠的 条评论
为什么被折叠?



