劍指OFFER_02_替換空格

題目描述

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

相關知識補充

【關鍵問題1】如何移動字符效率更高?
這個問題與空格的數量和空格的所在位置掛鉤,如果一個字符串中包含兩個及以上數量的空格。從前遍歷空格所在位置,遍歷到第一個空格後替換“%20”,移動一次後面的字符,遍歷到第二個空格後替換,又會移動一次後面的字符。爲了提升效率,選擇從後往前移動字符。
這就涉及另一個問題,從後往前移動的話各個字符要移動多少位呢?
【關鍵問題2】從後往前移動字符每次應該移動多少位?
首先應該明確,爲了給前面空格插入字符“騰位置”,越靠後的字符移動的位數會越多。假如有兩個空格,那麼第二個空格後面的字符就需要移動(3-1)*2位,(3-1)表示“%20”與“ ”之間的差,2表示空格的數量。以此類推,第一個空格與第二個空格之間的字符需要移動(3-1)*1位。

循環語句關鍵

1.從前往後統計空格數量

 for(int i=0;i<length;i++){
            if(str[i]==' ')
                count++;
        }

2.從後往前替換空格

鏈接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423?f=discussion
來源:牛客網
 for(int i=length-1;i>=0;i--){
            if(str[i]!=' '){
                str[i+2*count]=str[i];
            }
            else{
                count--;%別忘了從這裏減少移動數目
                str[i+2*count]='%';
                str[i+2*count+1]='2';
                str[i+2*count+2]='0';
            }
        }
發佈了21 篇原創文章 · 獲贊 2 · 訪問量 7970
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章