劍指offer 替換空格(兩種解法)

2021-10-05 03:53:40 字數 1280 閱讀 9562

【本題鏈結】

【題目描述】

【本題解析】

這道題題意很明確,就是考察字串操作的題,有多種解法,我主要說兩種解法。

【解題方法】

方法一:o(n2)的解法

常規方法,要在空格處新增乙個「%20」,則需要將後面的字串後移,否則,就會覆蓋後面的字元,導致輸出錯誤。

【具體實現】

1.通過計算原字串長度,和空格個數,我們可以得到新字串的長度(新增資料長度,為空格長度加2,多個則是空格個數的2倍關係)即newlength = oldlength + count * 2;

2.若字串對應位置不是空格,則往後挪;是空格則進行「%20」的插入

};方法二:o(n)的解法【具體實現】上面的方法要進行資料的挪移,時間複雜度高且效率低,我們可以使用c++中的string類中的+=操作來完成此題,十分簡單。

1.遍歷這個字串,若不是空格,則將字元+=到字串中

2.若空格,則直接+= "%20";

3.本題要求返回空值,所以我們不能將string類的字串返回,將string類轉成c語言識別的字串,使用_str.c_str(),然後拷貝到原字串中即可。

class solution 

}strcpy

(str,_str.

c_str()

);}}

;

【總結】

1.方法一更容易想到,邏輯簡單,但要控制資料的挪移**量稍大且效率低。

2.方法二巧妙使用到c++中string類的+=操作,可以完成對單一字元和字串的新增,只用呼叫介面較為簡單,且效率高。但要注意最後返回值是void,我們需要將string型別的字串,轉化成c語言中能識別的字串_str.c_str(),拷貝到原字串即可。

劍指offer 替換空格

思路 首先遍歷字串,找出空格的數量countspace,計算變換後的總長為newlength str.length 2 countspace。定義心得字元陣列,長度為newlength 從字串的後面開始複製和替換,如果不是空格,就複製,如果是空格,就變為 20.難點 牛客網上傳入引數是stringb...

劍指offer 替換空格

分析 當看到這個題目時,我們就會想著遍歷字串嘛,遇到空格替換成 20,可是空格只有乙個位元組,20是3個字 節,明顯是不夠的,所以我們遇到把字串整體後移 字串只能存放在陣列中 這樣,空格越多,後邊的字 符移 動的次數也越多。記住 移動的時候一定要移動 0 這樣,如果我們一次移動到位,這樣是不是好一點...

劍指offer 空格替換

空格替換 請實現乙個函式,將乙個字串中的空格替換成 20 例如,當字串為 則經過替換之後的字串為 問題 1 將空格替換成字串,字串將邊長。若要是在原來的字串上做替換,則保證字串後面有足夠的剩餘空間。問題2 若從頭到尾 的方向去替換,則每遇到乙個空格,這個空格後面所有的字元都得向後移動兩位,有的字元會...