【本題鏈結】
【題目描述】
【本題解析】
這道題題意很明確,就是考察字串操作的題,有多種解法,我主要說兩種解法。
【解題方法】
方法一: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 若從頭到尾 的方向去替換,則每遇到乙個空格,這個空格後面所有的字元都得向後移動兩位,有的字元會...