剑指Offer 05.替换空格
思路1:
直接使用String自带的方法
代码实现
class Solution {
public String replaceSpace(String s) {
return s.replace(" ", "%20");
}
}
思路2:
根据空格数,再新建一个字符数组,长度为应该返回的字符串的长度,并将原字符串变成字符数组,依次放入新字符数组中,遇到空格就放入 %20
代码实现
class Solution {
public String replaceSpace(String s) {
int count = 0;
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
if (Character.isWhitespace(ch[i])) {
count++;
}
}
char[] res = new char[ch.length + count * 2];
for (int i = 0, j = 0; i < ch.length; i++) {
if (Character.isWhitespace(ch[i])) {
res[j++] = '%';
res[j++] = '2';
res[j++] = '0';
} else {
res[j++] = ch[i];
}
}
return new String(res);
}
}
思路3:
创建一个StringBuilder对象,遍历s字符串,遇到空格就在StringBuilder对象中放入 %20 ,不是空格就正常放入即可
代码实现
class Solution {
public String replaceSpace(String s) {
if (s == null) return null;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
sb.append("%20");
} else {
sb.append(s.charAt(i));
}
}
return sb.toString();
}
}
思路4(双指针 在原字符串上进行操作):
- 创建StringBuilder对象,遍历s字符串,遇到空格就在StringBuilder对象中添加两个空格
- 分别设置两个指针,一个指向原s字符串的末尾,一个指向s字符串增长之后的末尾,如下图
- 两个指针依次往前,j指针遇到空格就在i指针依次放入 0 2 %,遇到正常字符就放入即可,直至 j < 0
代码实现
class Solution {
public String replaceSpace(String s) {
if (s.length() == 0 || s == null) return s;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
sb.append(" ");
}
}
int left = s.length() - 1;
s += sb.toString();
int right = s.length() - 1;
char[] ch = s.toCharArray();
while (left >= 0) {
if (ch[left] == ' ') {
ch[right--] = '0';
ch[right--] = '2';
ch[right--] = '%';
} else {
ch[right--] = ch[left];
}
left--;
}
return new String(ch);
}
}