【劍指offer算法】替換空格

替換空格

Day2

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

如果單從解決這題來說,第一反應想到的是java的replace方法替換。就很簡單的解決。

    
  public class Solution {
        public String replaceSpace(StringBuffer str) {
        	return str.toString().replaceAll(" ", "%20");
        }
    }

使用javascript
如果直接return str.replace(' ','%20');只能替換當前字符串的第一個匹配項。而js中沒有replaceAll這方法。
寫個循環

function replaceSpace(str) {
    do {       //indexOf只能找一處,加個循環
        var index = str.indexOf(' ', index + 1);   //尋找空格,每次從index+1去找
        if (index !== -1){     //找到空格
            str=str.replace(' ','%20');
        }
    }while (index !== -1)
    return str;
}

運行時間:14ms 佔用內存:5344k

不使用replace的話,也可以。用split()和join()簡化很多很多

function replaceSpace(str) {
    return str.split(' ').join('%20');   //先split把空格的分割開,再用join方法
}

運行時間:13ms 佔用內存:5356k

其實用單句的replace還是可以解決的,用正則表達式即可

function replaceSpace(str) {
    return str.replace(/\s/g,'%20');     //直接用正則表達式
}

運行時間:12ms 佔用內存:5428k
"/ /“正則固定寫法,”\s"是轉移符號用以匹配任何空白字符,包括空格、製表符、換頁符等等,"g"表示全局匹配將替換所有匹配的字符。

最後注意的是,字符串所有的方法,都不會修改字符串本身(字符串是不可變的),操作完成會返回一個新的字符串
如果console.log(str);結果還是原字符串,上述函數會返回一個新字符串,需要用一個新變量去接受這個返回值,打印這個新變量纔可以得到修改後的新字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章