題目背景:
在網絡編程中,如果URL參數中含有特殊字符,如空格、#等,可導致服務器端無法獲取正確的參數值。解決方案:將這些符號轉換成瀏覽器可以識別的字符,轉換規則是在%後面添加特殊字符ASCII碼的十六進制數。
題目描述:
請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
這道題的解決方案:可以把問題想的簡單或複雜,如下,這裏是簡單的解決方案
function replaceSpace(str)
{
/*
問題1:替換字符串,是在原來的字符串上做替換,還是新開闢一個字符串做替換!
問題2:在當前字符串替換,,可能覆蓋修改在該字符串後面的內存。再一個怎麼替換才更有效率!!!
從前往後替換,後面的字符要不斷往後移動,要多次移動,效率低下。O(n)
從後往前,先計算需要多少空間,然後從後往前移動,每個字符只移動一次,效率更高一點。O(n2) 雙指針解決
*/
//問題一的解決方案:開闢一個新的字符串conStr進行替換
var conStr = str.replace(/\s/g,"%20");
return conStr;
}
思考:這道題應該不是簡單的考察replace函數。面試官可能不僅僅想聽的是這樣的解決方案。空格替換是用1個字符(空格)替換成了3個字符(%20),每次替換,都會新增2個字符。