劍指 05 替換空格

2021-10-24 18:32:18 字數 1356 閱讀 3939

請實現乙個函式,把字串s中的每個空格替換成"%20"。

示例 1:

輸入:s =
使用額外空間,比較簡單,就是按順序掃瞄一遍輸入的字串,如果是非空格就直接push_back到新字串中,如果是空格就push_back「%20」到新字串中。

//解法1:使用額外空間

class

solution

return res;}}

;

這一題的主要考察點應該是不使用額外空間的情況。

如果按照常規想法,從前往後掃瞄輸入的字串,遇到空格就把空格後面的字串統一後移3位,那麼這種解法的時間複雜度就是o(n^2),八太行。

其實這題可以通過兩個步驟來實現:1、擴大空間2、替換新字元。從前往後的解法是將這兩步糅合在一起,每掃瞄到乙個空格就擴大一次空間(後面的字串向後移),並且在新擴大的空間上替換上新字元。如果把這兩步拆開就能省去在擴大空間後對字串的移動次數。

劍指書上與**隨想錄的大佬都給出了一種從後向前掃瞄的雙指標解法,可以把時間複雜度降到o(n)。

這種解法首先要統計原字串中空格的數量,然後統一resize空間,避免了遍歷掃瞄時一次一次重複移動空格後面的字元來擴大空間。

class

solution

}// 擴充字串s的大小,也就是每個空格替換成"%20"之後的大小

s.resize

(s.size()

+ count *2)

;int snewsize = s.

size()

;// 從後先前將空格替換為"%20"

for(

int i = snewsize -

1, j = soldsize -

1; j < i; i--

, j--

)else

}return s;}}

;

雙指標法主要體現在指標ij上,i指在resize以後的新字串最後乙個位置,j指在原字串最後乙個位置(最後乙個位置指的是可以放置字元的位置,並非』\0』)。當j指向的字元不是空格時,就將該字元複製到i指向的新位置;當j指向了空格,就在i指向的位置逐位寫入新字元,注意這裡的 --i 操作。

替換空格 劍指Offer 05 替換空格

請實現乙個函式,把字串 s 中的每個空格替換成 20 在python語言中,字串被設計成不可變型別,即無法直接修改字串的某一位字元,需要新建乙個字串實現。初始化乙個list 遍歷字串s中每個字元c,若c為空格,則在list中新增 20 若c不為空格,則在list中新增字元c。時間複雜度 o n 遍歷...

劍指offer系列05 替換空格

請實現乙個函式,把字串s中的每個空格替換成 20 示例 1 限制 0 s 的長度 10000 這個題感覺就十分簡單了,但是,我竟然會想到按照空格拆分字串再重新拼裝,鑽洞中?class solution vec.emplace back s.substr j,size for decltype vec...

劍指 Offer 05 替換空格

劍指 offer 05.替換空格 請實現乙個函式,把字串 s 中的每個空格替換成 20 示例 1 方法一 遍歷新增 由於每次替換從 1 個字元變成 3 個字元,使用字元陣列可方便地進行替換。建立字元陣列地長度為 s 的長度的 3 倍,這樣可保證字元陣列可以容納所有替換後的字元。class solut...