解法一:呼叫自帶函式str.tostring().replace(" ","%20")。
解法二:在當前字串上進行替換。
先計算替換後的字串需要多大的空間,並對原字串空間進行擴容;
從後往前替換字串的話,所有的字元都只複製(移動)一次,時間複雜度是o(n);
如果從前往後替換,每個字串需要多次移動,效率較低。
解法三:開闢乙個新的字串。當遇到 " ",就追加 "%20",否則遇到什麼追加什麼。
總結: 在合併兩個陣列(包括字串)時,如果從前往後複製每個數字(或字元)則需要重複移動數字(或字元)多次,那麼可以考慮從後往前複製,這樣就能減少移動的次數,從而提高效率。
publicclass
solution
}
publicclass
solution
}//newlength為把空格替換成'%20'之後的長度
int newlength = originallength + spacenum * 2;
str.setlength(newlength);
//對stringbuffer擴容!!
int indexoforiginal = originallength - 1;
int indexofnew = newlength - 1;
while (indexoforiginal >= 0 && indexofnew >indexoforiginal)
else
indexoforiginal --;
}return
str.tostring();
}}
publicclass
solution
else
}return
sb.tostring();
}}
publicclass
stringbufferbuildertest
}
劍指offer02 替換空格
自己寫的 public class solution return str.tostring 思路 1.統計空格個數count 2.設定新的字串長度newlen 原長度 2 count 3.設定兩個指標,indexold和indexnew,分別指向舊陣列末尾和新陣列末尾,從後向前遍歷。有兩種情況 1...
劍指offer 02替換空格
首先我們先算出整個字串的長度,還有總共多少個空格。因為空格只佔乙個位元組,但是 20 佔兩個位元組,所以新的容量是原來字串長度 空格數 2,然後把新的容量與給定的字串總大小作比較,如果大於給定的大小,就說明給的用例出錯了,直接返回。如果沒出錯,從原來字串末尾開始遍歷,如果是空格,則依次附給新字串同時...
劍指offer 02 替換空格
1 統計字串的長度和空格的個數 2 定義兩個指標分別指向原字串的末尾和替換後字串的末尾 3 移動兩指標,遇到空格進行替換,直到兩指標相遇結束 class solution int strlen 0 字串實際長度 int spacenum 0 空格個數 int i 0 while str i 0 st...