轉自牛客網【叫我皮卡丘】5.替換空格
牛客網【CyC2018】三的來源
題目描述
請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
一、調用自帶函數
- 代碼
public class Solution{
public String replaceSpace(StringBuffer str){
return str.toString().replace(" ", "%20");
}
}
二、用新的數組存
-
分析
當遇到 " ",就追加 “%20”,否則遇到什麼追加什麼 -
代碼
import java.util.*;
public class Solution{
public String replaceSpace(StringBuffer str){
StringBuilder sb = new StringBuilder();
for(int i=0; i<str.length(); i++){
char c = str.charAt(i);
if(c==' '){
sb.append("%20");
}else{
sb.append(c);
}
}
return sb.toString();
}
}
三、
-
分析
在字符串尾部填充任意字符,使得字符串的長度等於替換之後的長度。因爲一個空格要替換成三個字符(%20),因此當遍歷到一個空格時,需要在尾部填充兩個任意字符。
令 P1 指向字符串原來的末尾位置,P2 指向字符串現在的末尾位置。P1 和 P2 從後向前遍歷,當 P1 遍歷到一個空格時,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否則就填充上 P1 指向字符的值。
從後向前遍是爲了在改變 P2 所指向的內容時,不會影響到 P1 遍歷原來字符串的內容。 -
代碼
public class Solution{
public String replaceSpace(StringBuffer str){
int P1 = str.length() - 1;
for(int i=0; i<=P1; i++){
if(str.charAt(i)==' ')
str.append(" ");//注意這裏是追加兩個空格,因爲已經有了一個了
}
int P2 = str.length() - 1;
while(P1>=0 && P2>P1){
char c = str.charAt(P1--);
if(c == ' '){
str.setCharAt(P2--,'0');
str.setCharAt(P2--,'2');
str.setCharAt(P2--,'%');
}else{
str.setCharAt(P2--,c);
}
}
return str.toString();
}
}