Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
题目来源:LeetCode-URL化
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例 1:
输入:"Mr John Smith ", 13
输出:"Mr%20John%20Smith"
示例 2:
输入:" ", 5
输出:"%20%20%20%20%20"
提示:
字符串长度在 [0, 500000] 范围内。
二、思路分析:
思路一:
- 对字符串进行一次遍历,判断每个字符是否为空格
- 如果不是空格的话,则拼接加入到一个新的字符串中
- 如果是空格的话,则进行替换再拼接到新的字符串中
- 基于字符串的不断变化,此处可以使用StringBuilder进行求解
思路二:
- 可以直接使用java的方法replaceAll()进行实现
思路三:
- 题目描述需要使用字符数组实现,故可以将字符串先转为字符数组
- 首先生成一个长度为原字符串长度3被的字符数组
- 对字符串进行字符级别的循环判断
- 若字符不为空格,则直接加入到字符数组中
- 若为空格,则替换为'%' '2' '0' 后再加入到字符数组中
- 字符数组转为字符串返回输出
三、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);
}
}
复制代码
四、总结:
- 直接使用String的API效率是比较差的,只是提供一种思路
- 字符数组需要提前规定好长度,但是如此也存在一定的空间浪费