面試題4 替換空格和清除空格

2021-09-22 11:12:11 字數 1277 閱讀 1174

將長度為1的空格替換為長度為3的「%20」,字元差的產度變長。如果允許我們開闢乙個新的陣列來存放替換空格後的字串,那麼這道題目就非常簡單。設定兩個指標分別指向新舊字串首元素,遍歷原字串,如果碰到空格就在新字串上填入「%20」,否則就複製元字串上的內容。但是如果面試官要求在原先的字串上操作,並且保證原字串有足夠長的空間來存放替換後的字串,那麼我們就得另想方法。

如果從前往後替換字串,那麼儲存在空格後面的字串肯定會被覆蓋,那麼我們就考慮從後往前進行替換。

首先遍歷原字串,找出字串的長度以及其中的空格數量,

根據原字串的長度和空格的數量我們可以求出最後新字串的長度。

設定兩個指標originalindex和newindex分別指向原字串和新字串的末尾位置。

如果originalindex指向內容不為空格,那麼將內容賦值給newindex指向的位置,如果originalindex指向為空格,那麼從newindex開始賦值「02%」

直到originalindex==newindex時表明字串中的所有空格都已經替換完畢。

這道題目是需要清楚空格,那麼清除空格後所得到的字串要比原先的字串要短,這是我們從頭到尾進行清楚空格的話就不會覆蓋到空格後面的字元,所以我們可以從頭開始清除。

設定兩個指標p1和p2初始狀態都指向字串首字元。

如果p2指向的元素不為空格,那麼將p2指向的內容賦值給p1,然後p1和p2指向下乙個元素;如果p2指向的內容為空格,那麼p2指向下乙個元素。

直到p2指向字串末尾的'\0'時清除空格結束。

題目:給定字串,刪除開始和結尾處的空格,並將中間的多個連續的空格合併成乙個。例如輸入"

",則輸出"

"

這道題目跟第二題類似,都是需要刪除空格,這樣可以肯定輸出的字串長度小於等於原先字串的長度,那麼就可以從頭往後遍歷而不怕後面的字元被覆蓋。因為需要刪除開始和結尾處處的空格,而字串中間的空格又需要儲存乙個,我們需要進行另外的處理。我們可以通過設定乙個標識位來進行處理,定義乙個bool變數keep_space表示是否儲存乙個空格,如果keep_space=true表示儲存乙個空格,如果keep_space=false則不儲存空格。初始化的時候將keep_space設為false,這樣開始階段的空格都不會被儲存,當碰到乙個不為空格的字元是,儲存該字元,然後設定keep_space=true表明會儲存字串中的第乙個空格,這樣在碰到第乙個個空格時就能夠儲存。

在字串結果,經過上述幾步操作,可以保證字串結尾要麼是非空字元,要門是乙個空字元,這樣進行一次判斷就好了,如果是空格字元,這將該空格設為'\0',如果不為空字元,則在其後面加上'\0'

面試題3 替換空格和清除空格

一 替換空格 分析 在空間複雜度盡可能低的情況下,不允許開闢乙個新的陣列來存放替換空格後的字串。如果 從前往後替換字串,那麼儲存在空格後面的字串肯定會被覆蓋。假設字串的長度為n。對每個空格字元,需要移動後面o n 個字元,因此對含有o n 個空格字元的字串而言總的 時間複雜度是o n 2 明顯不可取...

面試題4 替換空格

面試題4 實現乙個函式,把字串中的空格替換成 20 從前向後移動時,假如字串的長度為n。對於每個空格字元,需要移動後面o n 個字元,對含有o n 個空格字元的字串而言總的時間效率是o n n 從後向前移動時,所有的字元只需要複製一次,時間效率為o n void replaceblank char ...

面試題4 替換空格

注 圖中帶陰影的區域表示被移動的字元。a 把第乙個指標指向字串的結尾,把第二個指標指向替換後的字串的末尾。b 依次複製字串的內容,直至第乙個指標碰到第乙個空格。c 把第乙個空格替換成 20 把第乙個指標向前移動1格,把第二個指標向前移動3格。d 依次向前複製字串中的字元,直至碰到空格。e 替換字串中...