請實現乙個函式,把字串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;}}
;
雙指標法主要體現在指標i
與j
上,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...