兩分鐘看懂空格替換

2021-07-11 13:06:32 字數 1366 閱讀 2539

背景:網路程式設計中,如果說url引數中含有特殊字元,就拿空格說,可能導致伺服器端無法獲得正確的的引數值,這個時候就需替換。

1.空格,替換成%20

2.#被替換成%23,等

總體思想:

1.遍歷找空格。

2.移動字元位置。

3.替換空格。

第一種:時間複雜度o(n^2)

如果,從頭開始遍歷,遇到空格後,需要將空格後的所有字串後移動兩個位置,如果在遇到空格,空格後的字串又得在移動,看圖:

對於含有o(n)個空格字元的字串來說,時間效率就是o(n^2),  這種效率是不可以的。

當然:對於那些重新申請空間來裝增長後的字串的方法,時間上是提高了效率,但同時也消耗了空間,總體來說,不是最好的。

來看一種相對比較好的:

第二種:時間複雜度o(n)

方法步驟:

1.遍歷字串,統計空格個數,統計字元創總長;

2.每個空格加兩個字元長度,計算所有空格替換為響應字元後的總長度;

3.從字串的後邊往前替換,

上圖,看圖理解:

從後往前替換,p2指向增長後的字串,p1指向原來字串,p1和p2同時往前移動,當p1遇到空格時,p2停下來,

在p1的位置插入替換的字串最後乙個字元,例如替換的字串是「%20「,那麼就在p1位置插入0,p1繼續前移,p2不動,

相同的方法插入% 2 等字元,當p1指向%前乙個字元,p2 開始動,當p1 == p2結束 over

上**:

//length 為字元陣列string的總容量

void replaceblank(char string, int length)

//newlength 為把空格替換成'%20'之後的長度

int newlength = originallength + numberofblank * 2;

if(newlength > length)

return;

int indexoforiginal = originallength; //相當於圖中的p1

int indexofnew = newlength; //相當於圖中的p2

while(indexoforiginal >= 0 && indexofnew > indexoforiginal)

else

-- indexoforiginal;}}

賜教!

兩分鐘看懂空格替換

背景 網路程式設計中,如果說url引數中含有特殊字元,就拿空格說,可能導致伺服器端無法獲得正確的的引數值,這個時候就需替換。1.空格,替換成 20 2.被替換成 23,等 總體思想 1.遍歷找空格。2.移動字元位置。3.替換空格。第一種 時間複雜度o n 2 如果,從頭開始遍歷,遇到空格後,需要將空...

兩分鐘看懂有效的括號

有效字串需滿足 示例 1 輸入 s 輸出 true 示例 2 輸入 s 輸出 false 我們用四步分析法來分析一下這道題目。1.模擬 有效的情況 1 不巢狀 1 長度為奇數,左括號多餘 2.規律 通過上述的模擬,可以總結出以下 3 個特點 3.匹配 整個過程分為兩步,乙個是配對,乙個是消除。配對過...

兩分鐘安裝mysql

mysql 設定mysql客戶端預設字符集 default character set utf8 mysqld 設定3306埠 port 3306 設定mysql的安裝目錄 basedir e mysql mysql 8.0 11 winx64 設定mysql資料庫的資料的存放目錄 datadir ...