替換空格

Joy_917發表於2020-11-28

題目:

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

思路:

  1. 首先就不考慮使用自帶的replace函式了,不然沒有意義;開闢額外空間也可以做,比如用個StringBuilder在遍歷判斷的同時來拼接字元即可。
  2. 這裡使用in-place方法來實現。
  3. 如果不開闢新的字串,我們可以先計算出空格的數量,逆序遍歷字串,將空格後的字元整體後移兩位,在前面補上%20(不順序替換是因為那樣每遇到一個空格都要整體移動後面所有的字元,操作更多更耗時,逆序只需要移動一次)

程式碼:

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	if(str==null) return null;
        char[] result = str.toString().toCharArray();
        int count = 0;
        for(char c :result){
            if(c==' ') count ++;
        }
        // 擴容需要的大小
        str.setLength(count*2+str.length());
        for(int i = result.length-1;count>0;i--){
            if(result[i]==' '){
                count--;
                str.setCharAt(i+2*count,'%');
                str.setCharAt(i+2*count+1,'2');
                str.setCharAt(i+2*count+2,'0');
            }else{
                str.setCharAt(i+2*count,result[i]);
            }
        }
        return str.toString();
    }
}

相關文章