題目描述
請實現一個函數,將一個字符串中的每個空格替換成“%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';
}
}