劍指offer--字串替換空格
阿新 • • 發佈:2019-01-13
將一個字串中的空格替換成 "%20"。
Input:
"We Are Happy"
Output:
"We%20Are%20Happy"
這道題第一眼看好簡單啊,直接遍歷然後替換空格就好了啊, 唯一要注意是引數StringBuffer形式
public class Solution { public String replaceSpace(StringBuffer str) { String res=""; for(int i=0;i<str.length();i++){ if(str.charAt(i)==' ') res += "%20"; else res += str.charAt(i); } return res; } }
看了牛客網答案有的人從後往前做,不明白為什麼要複雜化,看了說明,是考慮到在 原字串上做替換。這樣的話從後往前只需要移動一次比較簡單。
從前往後替換,後面的字元要不斷往後移動,要多次移動,所以效率低下
從後往前,先計算需要多少空間,然後從後往前移動,則每個字元只為移動一次,這樣效率更高一點。
我的答案:要注意從後往前下標從length-1開始
public class Solution { public String replaceSpace(StringBuffer str) { int space_num = 0; int old_length = str.length(); for(int i=0;i<old_length;i++){ if(str.charAt(i)==' ') space_num++; } int new_length = old_length+2*space_num; int j= new_length-1; str.setLength(new_length); for(int i=old_length-1;i>=0;i--){//這裡別人還加了一個i<=j的條件,但是我覺得不必要 if(str.charAt(i)==' '){ str.setCharAt(j--,'0'); str.setCharAt(j--,'2'); str.setCharAt(j--,'%'); } else str.setCharAt(j--,str.charAt(i)); } return str.toString(); } }