替換空格 合併陣列字串

2021-07-10 22:43:07 字數 1496 閱讀 6749

把字串中的每個空格換成「%20」。

注意:如果在原來的字串上做替換,要保證字串最後有足夠的空餘記憶體

直接的解法:時間複雜度為o(n^2)

從頭到尾掃瞄字串,每次碰到空格的時候做替換。由於是把乙個字元換成三個字元,必須把空格

後面的所有字元都向後移動兩個位元組,否則就有兩個字元被覆蓋了。

效率不高的原因是很多字元都移動了很多次,所以應該減少移動次數。

從後向前替換:時間複雜度是o(n)

我們可以先遍歷一次字串,這樣就能統計出字串的總長度和空格的數目。每替換一次空格,

長度增加2.因此,我們替換以後的字串長度等於原來的長度加上2*空格的數目。

我們從字串的後面開始複製和替換。首先定義兩個指標,p1和p2。p1指向原始字串的尾部

p2指向替換後字串的尾部,接下來向前移動指標p1,諸葛把它指向的字元複製到p2指向的位置,知道碰到第乙個空格為止。碰到第乙個空格以後,把p1向前移動一格,在p2之前插入「%20」。同時把p2向前移動3格。

從上面的分析可以看出,所有的字串都只複製(移動一次),因此時間複雜度為o(n)。

合併陣列(包括字串):如果從前往後複製每個數字(或字元)需要移動數字(或字元)多次,那麼我們可以考慮從後往前複製,這樣就會提高效率。

例如:有兩個排序的陣列a1和a2,內存在a1的末尾有足夠的空餘空間容納a2。要把a2中所有的數字插入到a1中並且所有的數字是排序的。更好的辦法是從尾到頭比較a1和a2中的數字,並把較大的數字複製到a1的合適位置。

字串替換空格

點 抽象問題簡化問題 題意 乙個字串,比如 aaa baea erwe dsa dsa f a 替換其中的空格字元為 20 劍指offer面試題4 思路 這個問題的點在於,如果正常從頭到尾替換的話,每乙個被替換空格,它後面的全部字串都需要做整體移動 所以要設法想出,怎麼能夠減少字串移動 非空格字元需...

替換空格(字串)

思路一 利用string類的replaceall方法 public class solution 思路二 將字串轉換為字元陣列 建立乙個新的stringbuffer的物件,遍歷字元陣列,將不為空格的字元直接存入 當遇到空格時,存入 20 public class solution return st...

字串 替換空格

方法 從後往前替換,先求出字串總長度 空格數 新字串長度,然後兩個指標分別指向原始字串末尾和新字串末尾,依次替換,遇到空格時則替換為 0 2 include includevoid replaceblank char string,int length int newlength originall...