題目描述
請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
解題分析
替換字符串中的空格,一、我們可以重頭開始往後遍歷,遇到空格就用%20替換,考慮到這樣的話需要移動的元素很多,每替換一個空格,他後面的所有元素都要移動,時間複雜度太高。二、從後往前替換空格,那麼只需要移動空格後面的字符串就行了,這樣大大減少時間複雜度。
//length爲牛客系統規定字符串輸出的最大長度,固定爲一個常數
class Solution {
public:
void replaceSpace(char *str,int length) {
//spaceLength記錄空格的個數
int spaceLength=0;
//OldLength記錄字符串長度
int OldLength=0;
//開始遍歷計數
int k=0;
while(str[k]!='\0'){
OldLength++;
if(str[k]==' '){
spaceLength++;
}
k++;
}
//替換後的字符串長度
int newLength=OldLength+spaceLength*2;
//與牛客系統給的長度值比較
if(newLength>length){return;}
//從後面開始替換
while(OldLength>=0&&newLength>OldLength){
if(str[OldLength]==' '){
str[newLength--]='0';
str[newLength--]='2';
str[newLength--]='%';
}
else{
str[newLength--]=str[OldLength];
}
OldLength--;
}
}
};