將乙個字串中的所有空格替換成 20%,最直觀的做法是從頭到尾掃瞄字串,然後每次碰到空格時便替換,並將空格後面所有的字元向後移兩個位元組。
假設字串長度為n,對每個空格字元,需要移動後面o(n)個字元,因此對含有n個空格的字串而言總的時間效率是o(n^2) 。
時間複雜度達到n平方,說明程式效率並不高,因此可以採用另一種做法,就是先遍歷一邊字串,計算出空格的數目,然後從字串的後面開始複製和替換。首先準備兩個指標,p1和p2,p1指向原字串的末尾而p2指向新生成字串的末尾。接下來在向前移動指標p1的過程中,把它指向的字元逐個複製到p2指向的位置中去。當碰到空格時,p2指標向前移動三位且為它指向的字串加上20%三個字元。當所有的空格遍歷完後,p1與p2指向了同個位置,此時替換結束。
**實現如下:
// length 為字元陣列str的容量
void replaceblank( char str[ ], int length )
i++;
originallength ++;
} int newlength = originallength + numberofblank * 2; // 儲存新生成的字串長度
if( newlength > length )
return;
while( newlength > originallength && originallength >= 0 )else
originallength --;
}}
劍指Offer 替換字串中空格
另外一種較好的解法是從後往前替換,具體做法是從頭遍歷計算所有空格數,計算出總的長度。該解法的前提條件是若在源字串上替換就要求源字串有足夠的空間來容納新的字串。時間複雜度為o n 解決辦法一 利用replace函式 將str轉為字串後呼叫replace方法,將空格轉為 20 即可。需要注意的是repl...
劍指offer 字串替換空格
見到這個題目,我們很容易想到 申請一塊新空間,儲存變化後的字串,顯然不是我們想要的結果 由此,我們可以想到如下方法 1 先遍歷一次字串,統計出字串中空格的總數,並可以由此計算出替換之後字串總長度。每替換乙個空格,長度增加2,因此替換以後字串的長度等於原來的長度加上2乘以空格數目。2 然後從後往前開始...
替換字串中空格
如 輸入 i love you baby 輸出 i20 love 20you 20baby 時間複雜度為o n 解法,先遍歷一遍陣列計算出空格數量,由於替換乙個空格需要多增加2個位元組,所以替換後增加位元組數應該為 n 2 sum space 然後使用兩個指標分別指向原來字串的末尾和替換後新字串的末...