c 牛客網刷題 02替換空格

2021-09-23 15:41:57 字數 1443 閱讀 8295

任務:

思路:(1)首先說明,從正向插入的話,遍歷一遍,將長度為1的空格替換為長度為3的%20, 字串的長度會變長,所以題目允許我們開闢新的陣列來進行存放替換後的字串的話,那是肯定沒得問題的,而且問題也就變得很簡單:

step1:設定兩個指標分別指向新舊字串的首元素;

step2:遍歷原字串,如果遇到空格,就在新字串相應位置填入%20;

step3:如果沒有遇到空格,就把原字串上的內容複製到新字串上。

但是!!!凡事都有但是,面試當然應該沒有這麼簡單,對,本題有了空間的限制,所以就不能正向,很難避免越界問題;

(2)那麼該怎麼辦呢?我們需要在原字串上進行操作,我們需要保證原字串有足夠長的空間來存放替換後的字串,所以,從前往後的話,儲存在空格後面的字串肯定會被覆蓋,因為是字元陣列!

所以按照下面的方法來:

(3)從後往前進行替換:

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

b)根據原字串的長度以及空格的數目就可以確定新字串的長度,可以提前進行判斷!

c)設定兩個指標p1p2分別指向原字串和新字串的末尾(指向末尾才能反向遍歷)

d)進行判斷,

如果·p1·指向內容不是空格,就吧內容賦值給p2指向的位置

如果p1指向空格,就從p2的位置開始賦值02%

e)一直到p1p2相遇,這個時候同時p1還沒減過頭

大概就是怎麼乙個思路:

**如下:

class solution 

int newlength = oldlength + 2 * numofblanks; // 根據空格數目預算好新的字串的長度

// 第二次邊界檢查,如果新的字串的長度大於給定的界限(也就是這裡的空間限制),那麼就直接返回!

if (newlength>length)

return;

int p1 = oldlength;

int p2 = newlength;

// 替換結束的條件,p1走到了0且p2的長度還是比p1大

while(p1>=0 && p2 > p1)

else

p1--;

}return;

}};

提交結果:

牛客網刷題3 替換空格

題目 思路 1.我們知道字串的遍歷無非是從左到右和從右到左兩種。1 如果從左到右,會發現如果遇到空格,會將原來的字元覆蓋。於是,此方法不行。2 那麼就考慮從右向左,遇到空格,就填充 20 否則將原字元移動應該呆的位置。2.具體如圖 每替換一空格,長度增加2 int newlength origina...

牛客網刷題 02

1.splice 從陣列中新增 刪除專案 arr.splice 2,0,william splice 方法向 從陣列中新增 刪除專案,然後返回被刪除的專案。注釋 該方法會改變原始陣列。2.slice 可從已有的陣列中返回選定的元素 var newarr arr.slice 0 slice start...

每日刷題 牛客 替換空格

什麼這題也要思路,這比1 1 2難不了多少吧。可能有人問那為什麼還有做?ps 就當複習一下正則也未嘗不可吧。function replacespace str string方法 replace replace 方法返回乙個由替換值 replacement 替換一些或所有匹配的模式 pattern 後...