背景:網路程式設計中,如果說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 ...