1. 程式人生 > >牛客網線上程式設計(劍指offer)---字串替換

牛客網線上程式設計(劍指offer)---字串替換

題目描述
請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

思路分析:
之前在書上看到這個題,本來這個題的思想時,為了降低替換的複雜度,應該首先遍歷得到替換後字串的長度,然後從後往前替換,這樣能避免有些情況時多次移動字串。但是Java中有了StringBuffer,可以改變字串的長度,所以更加方便。
但是一開始的時候,這麼寫的時候,發現當連續多個空格時,只能替換成一個“%20”,這與實際情況不符,程式碼如下:

public class Solution {
    public String replaceSpace(StringBuffer str
) { int len = str.length(); char[] res = {'%','2','0'}; for (int i = 0; i < len; i++) { if (str.charAt(i)==' ') { str.deleteCharAt(i); str.insert(i,res);//第一個位置是offset,也不知道是不是這個不對? } } return
str.toString(); } }

但是事實證明,最好不要輕易改變原變數。這個能通過87%的用例,估計連續多個的空格都不行。
然後參考了下別人寫的,改成下面這個,雖然新建了個物件,但是這麼做穩妥一點。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int len = str.length();
        String res = "%20";
        StringBuffer stringBuffer = new StringBuffer();
        for
(int i = 0; i < len; i++) { if (str.charAt(i)==' ') { stringBuffer.append(res); }else{ stringBuffer.append(str.charAt(i)); } } return stringBuffer.toString(); } }

最後得到的執行結果是:
//執行時間:37ms
//佔用記憶體:654k

還有看到更加簡潔明瞭,特別厲害的方法,就是用了String類的replaceAll方法,如下:

`public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(“\s”,”%20”);
}
}

`
執行結果:

執行時間:30ms
佔用記憶體:629k