劍指offer面試題5 替換空格

2021-09-13 18:49:10 字數 1155 閱讀 2773

// 面試題5:替換空格

/*思路一:新建乙個足夠的大小的字串空間,然後依次將字元拷貝,遇到空格進行三個字元的填充,接著重複執行前面的操作將整個字串替換完畢。

時間複雜度o(n),空間複雜度o(n).

思路二:從頭到尾掃瞄字串,每次遇到空格將後續字元向後移動兩個位置,然後進行填充。時間複雜度o(n^2)

思路三:從尾部到頭進行替換,首先遍歷一次字串的長度,統計其中的空格個數,然後一次性將最末尾的單詞向後移動足夠的位數。填充倒數第乙個空格,穿插移動第二個單詞,

接著進行空格的填充,直到所有的空格填充完畢。時間複雜度o(n),空間複雜度o(1).

*/#include #include void replaceblank(char str, int length)

int originallength = 0;

int numofblank = 0;

int i = 0;

//統計原始字串的長度及其中的空格個數

while (str[i]!='\0')

i++;

} //依據空格的個數重新計算填充以後的字串長度

int newstringlength = originallength + numofblank * 2;

//遍歷原來的字串,並進行替換操作

int indexoforiginal = originallength; //indexoforiginal作為原始字串的位移指標

int indexofnew = newstringlength; //indexofnew作為新字串的位移指標

while (indexoforiginal >=0 && indexofnew > indexoforiginal)

else

indexoforiginal--;

} i = 0;

while (str[i] != '\0')

printf("\n");

}// ********************測試**********************

劍指Offer 面試題5替換空格

note 劍指offer的題可以在牛客網上做題驗證思路的正確性 思路 因為stringbuffer本身是可變字串序列,可以修改,實際上它的可變是犧牲空間換取的。替換可能導致超出其容量,char陣列的複製和新建。public string replacespace stringbuffer str s...

劍指offer 面試題5 替換空格

拿到這個題時,第乙個要考慮的就是記憶體夠不夠的問題。因為原來空格是乙個字元,現在要將乙個空格替換為三個字元,記憶體會變大。現在假設是在記憶體足夠的情況下修改。過程如下 完成乙個空格的替換 完成替換 測試用例的考慮 如下 void changestr char arr,int sz int i 0 i...

劍指offer面試題5 替換空格

如果採用傻瓜式的做法,從頭開始找空格字元,再進行替換,那麼需要將空格後面的所有字元都往後移動2個位置。假設字串長度為n,對每個空格字元,需要移動後面o n 個字元,因此對含有o n 個空格字元的字串而言總的時間效率是 這個時候考慮從原字串的後面開始進行字串替換操作。先遍歷一次字串,統計出空格的數目,...