演算法學習記錄二(C++)--->字串空格替換

Deft_MKJing宓珂璟發表於2017-07-31

描述

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

思路

問題1:在原來的字串上進行替換
問題2:從前往後替換,後面的字元要不斷往後移動,要多次移動,所以效率低下
結論:在原來的字串上進行替換,而且從後往前,先計算出需要多少空間,然後從後往前移動,每個字串移動一次,這樣效率更高一點

C++實現

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == NULL || length <= 0) return;
        int origin_l = 0;
        int space_count = 0;
        // 計算出空格的個數
        for(int i = 0;str[i]!='\0';i++){
            origin_l++;
            if(str[i] == ' '){
                space_count++;
            }
        }

        // 重新替換後的字串長度 這裡*2是空格替換三個字元
        int new_l = origin_l + 2*space_count;
        // 從後往前替換
        for(int j=origin_l;j>=0&&new_l>j;j--){
            if(str[j] == ' '){
                str[new_l] = '0';
                new_l--;
                str[new_l] = '2';
                new_l--;
                str[new_l] = '%';
            }
            else{
                str[new_l] = str[j];

            }
            new_l--;
        }
    }
};

相關文章