面試經典(2) 刪除特定字元

2021-06-21 14:52:07 字數 1069 閱讀 7611

題目:輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入

」they are students.」

和」aeiou」

,則刪除之後的第乙個字串變成

」thy r stdnts.」

。分析:

我們考慮如何在字串中刪除乙個字元。由於字串的記憶體分配方式是連續分配的。我們從字串當中刪除乙個字元,需要把後面所有的字元往前移動乙個位元組的位置。但如果每次刪除都需要移動字串後面的字元的話,對於乙個長度為

n的字串而言,刪除乙個字元的時間複雜度為

o(n)

。而對於本題而言,有可能要刪除的字元的個數是

n,因此該方法就刪除而言的時間複雜度為

o(n2)。

事實上,我們並不需要在每次刪除乙個字元的時候都去移動後面所有的字元。我們可以設想,當乙個字元需要被刪除的時候,我們把它所佔的位置讓它後面的字元來填補,也就相當於這個字元被刪除了。在具體實現中,我們可以定義兩個指標

(pfast

和pslow)

,初始的時候都指向第一字元的起始位置。當

pfast

指向的字元是需要刪除的字元,則

pfast

直接跳過,指向下乙個字元。如果

pfast

指向的字元是不需要刪除的字元,那麼把

pfast

指向的字元賦值給

pslow

指向的字元,並且

pfast

和pstart

同時向後移動指向下乙個字元。這樣,前面被

pfast

跳過的字元相當於被刪除了。用這種方法,整個刪除在

o(n)

時間內就可以完成。

**如下:

void deletechars(char *pstrsource,const char *pstrdelete)

char *pfast=pstrsource;

char *pslow=pfast;

while(*pfast)

++pfast;

} *pslow='\0';

}

刪除特定字元

題目大意 編寫乙個高效率的演算法來刪除字串中的給定字元。比如,this is a student 是源字串,aeiou 是刪除字串,則結果為 ths s stdnt 一開始想到新建兩個陣列,乙個用下標表示刪除字串中出現的字元,乙個用來儲存經過處理的字串,結果輸出第二個陣列,如下 include in...

SQL刪除特定字元

請教sql刪除特定字元 sql語句為 update table name set field name replace field name from str to str 說明 table name 表的名字,field name 欄位名,from str 需要替換的字串,to str 替換成的字...

經典面試2

為什麼要放在一起寫?因為alloc和init有可能返回不同的物件 層和uiview的區別是什麼?圖層不會直接渲染到螢幕上,uiview更像是乙個calayer的管理器,乙個uiview上可以有n個calayer,每個layer顯示一種東西,增強uiview的展現能力 pch檔案的作用 pch來自外部...