请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
示例 1:
输入:s = "We are happy."输出:"We%20are%20happy."
限制:
- 0 <= s 的长度 <= 10000
思路
字符数组
定义一个3倍大小的字符数组
class Solution {
public String replaceSpace(String s) {
char[] before = s.toCharArray();
int len = s.length();
char[] chars = new char[3 * len];
int j = 0;
for (int i = 0; i < len; i++) {
if(before[i] == ' ') {
chars[j++] = '%';
chars[j++] = '2';
chars[j++] = '0';
} else {
chars[j++] = before[i];
}
}
return new String(chars, 0, j);
}
}
双指针
先扩充字符串到替换后的大小,再从后往前写入字符
class Solution {
public String replaceSpace(String s) {
if (s == null || s.length() == 0) {
return s;
}
// 字符串中每一个空格多占2位,用两个空格占位,多余的空间都用str表示
StringBuilder str = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
str.append(" ");
}
}
//若是没有空格直接返回
if (str.length() == 0) {
return s;
}
//有空格情况 定义两个指针
int left = s.length() - 1;//左指针:指向原始字符串最后一个位置
s += str.toString(); // 扩充字符串
int right = s.length() - 1;//右指针:指向扩展字符串的最后一个位置
char[] chars = s.toCharArray();
while (left >= 0) {
if (chars[left] == ' ') {
chars[right--] = '0';
chars[right--] = '2';
chars[right] = '%';
} else {
chars[right] = chars[left];
}
left--;
right--;
}
return new String(chars);
}
}
