思路一:
先遍历字符串,每遍历到一个空格就在原字符串末尾增加2个空格;
将扩容后的字符串转成char数组,然后对其内容进行重写;
采用双指针,一个指针i的起始位置在未扩容前长度的末尾,另一个指针j则处于扩容后长度的末尾;
结束条件为:指针j移动到char数组的头部;
时间复杂度:O(N)
import java.util.*;
public class Solution {
public String replaceSpace (String s) {
if(s.length() == 0) return "";
//扩容
StringBuilder sb = new StringBuilder(s);
for(char ch : s.toCharArray()){
if(ch == ' ') sb.append(" ");
}
//覆盖原字符
char[] arr = sb.toString().toCharArray();
for(int i = s.length() - 1, j = arr.length - 1; j >= 0; i--,j--){
if(arr[i] != ' ') arr[j] = arr[i];
else {
arr[j--] = '0';
arr[j--] = '2';
arr[j] = '%';
}
}
return new String(arr);
}
}
思路二:(超级简单)
使用StringBuilder来进行扩容和拼接;
时间复杂度O(N);
注:字符串对象通过“+”的字符串拼接方式,实际上是通过 StringBuilder 调用 append() 方法实现的,拼接完成之后调用 toString() 得到一个 String 对象 。
import java.util.*;
public class Solution {
public String replaceSpace (String s) {
// 直接用StringBuilder
StringBuilder sb = new StringBuilder();
for(char ch : s.toCharArray()){
if(ch == ' ') sb.append("%20");
else sb.append(ch);
}
return sb.toString();
}
}