劍指offer 面試題 (替換空格) 1

2021-07-11 16:00:47 字數 1004 閱讀 5133

題目分析:

首先,我們應該想到的是原來是乙個空格字元,替換之後變為三個字元 『%』 ,『2』 ,『0』;

如果我們直接在原來的字串上進行替換,就有可能覆蓋掉原本的內容;如果是建立新的字串並

新的字串上做替換,那麼我們可以自己分配好足夠的記憶體,所以我們應該向面試官問清楚如果面

試官告訴你在原本的字串上做修改,並且記憶體足夠,那麼你就可以放手來做了。

演算法選擇:

如果我們選擇正面替換,則遇到乙個空格字元,就需要替換三個字元,那麼空格後面的

所以內容就都要向後挪動三個字元的長度,你會發現,會有不少內容被重複移動,可以自己在本子上

畫一畫就清楚了,我在這裡不做**!   那麼你就要考慮一下這種方法是否最簡了,如果實在想不到,

就把這種方法寫上吧,我在這裡提供倒序替換,就是反著替換的方法,通過改變字元陣列的方法實現;

**如下:

#include#include#include#include#define max 50

void replaceblank(char arr)

*/ while(arr[i]!='\0')

newlength = length + 2*num;//newlength 是把空格替換成%20之後的長度

if(newlength > max)//新陣列都不能大於原陣列最大長度

return ;

/* 迴圈結束條件這裡需要自己畫圖理解一下;

因為是從後往前遍歷,所以length肯定》=0;

而新開闢的newlength 始終大於length,直到相遇;

*/ while(length >= 0 && newlength > length)

else

--length; }}

int main()

這道題我講的比較粗糙,主要是沒有畫圖理解,這個希望大家自己在底下按照我說的進行畫圖幫助理解!

謝謝!

劍指offer面試題 替換空格

題目 請實現乙個函式,把字串中的每個空格替換成 20 例如輸入 則輸出 解析 時間複雜度為o n 的解法。完整 及測試用例實現 cpp view plain copy include using namespace std include length 為字元陣列string的總容量 void re...

替換空格(劍指offer面試題4)

分析 從頭到尾掃瞄字串,遇到空格就替換,導致後面的字元都要向後移,意味著總時間複雜度為o n 2 更好的辦法,從字串後面遍歷替換。先遍歷所有的空格,每多乙個空格,字串長度加2個,也就是說最後替換後的字串長度為原長度 2 空格數,設定兩個指標,指向原始字串末尾和新字串末尾,依次向前遍歷,原始字串指標遇...

劍指Offer 面試題四 替換空格

c c 把常量字串放到單獨的乙個記憶體區域。當幾個 指標賦值給相同的常量字串時,它們實際上會指向相同的記憶體位址。但是用常量記憶體初始化陣列,情況卻不相同。如下 includeusing namespace std int main 執行結果 same no same 請按任意鍵繼續.分析 ch1和...