劍指Offer每日一刷 -2017年11月11日
阿新 • • 發佈:2019-02-08
題目描述
請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。方法一:使用JDK API進行替換
方法二:public class ReplaceBackspace { public String replaceSpace(StringBuffer str) { String string = str.toString(); String replace = string.replace(" ", "%20"); return replace; } }
/*
問題1:替換字串,是在原來的字串上做替換,還是新開闢一個字串做替換!
問題2:在當前字串替換,怎麼替換才更有效率(不考慮java裡現有的replace方法)。
從前往後替換,後面的字元要不斷往後移動,要多次移動,所以效率低下
從後往前,先計算需要多少空間,然後從後往前移動,則每個字元只為移動一次,這樣效率更高一點。
思路是:1.先計算出str中有多少個 空格;
2.計算出將空格替換成"%20"後,str的長度newLength
3.設定str的長度為newLength,長度會增加,新增加的長度沒有值
4.對str按照原有長度從後向前遍歷,將每個字母按照新的長度從後向前進行賦值,方法三:public String replaceSpace(StringBuffer str){ //統計str中的space個數 int spaceNum = 0; //記錄space的個數 for(int i=0;i < str.length();i++){ if(str.charAt(i) == ' '){ //判斷i索引處的char字元是否是' ' spaceNum ++; } } int oldLength = str.length(); int newLength = str.length()+ spaceNum*2; //%20佔有三個字元才長度,所以在原有的space的基礎上新增spaceNum*2 int oldIndex = oldLength-1; int newIndex = newLength-1; //StringBuffer newStr; str.setLength(newLength); //對已有的str從後向前遍歷,遇到 ' '時 插入'%', '2','0' for(;oldIndex>=0 && oldIndex < newLength;--oldIndex){ if(str.charAt(oldIndex) == ' '){ str.setCharAt(newIndex--,'0'); str.setCharAt(newIndex--, '2'); str.setCharAt(newIndex--, '%'); }else{ str.setCharAt(newIndex--, str.charAt(oldIndex)); } } return str.toString(); }
public static String replaceSpace(StringBuffer str){
if(str==null)
{return "%20";}
char[] ss = str.toString().toCharArray();
StringBuffer sb = new StringBuffer();
for(int i=0;i<ss.length;i++){
if(ss[i] == ' '){
sb.append("%20");
}else{
sb.append(ss[i]);
}
}
return sb.toString();
}