题目
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例 1:
输入:"Mr John Smith ", 13
输出:“Mr%20John%20Smith”
解题思路
题目要求Java使用字符数组实现,提供一种在字符数组中完成操作的解法。
代码
class Solution {
public String replaceSpaces(String S, int length) {
// 极端情况下length个字符都是' ',替换后数组中存放length个"%20"
char[] chars = new char[length * 3];
// 每个字符后预留2个"空位",以方便将' '替换为"%20"
for (int i = 0; i < length; i++) chars[(i) * 3] = S.charAt(i);
int left = 0, spaces = 0;
for (int i = 0; i < chars.length; i += 3) {
// ' '替换为"%20"
if (chars[i] == ' ') {
chars[i] = '%';
chars[i + 1] = '2';
chars[i + 2] = '0';
// 记录空格数量,用于后续计算替换后的字符数组长度
spaces++;
}
}
// 整理字符数组,去除字符之间预留的"空位"
for (int i = 0; i < chars.length; i++) {
if (chars[i] != '\u0000') chars[left++] = chars[i];
}
return new String(chars, 0, length + spaces * 2);
}
}