刪除主串中模式串出現的字元

2021-07-10 13:46:20 字數 1079 閱讀 7581

思路:最直接的思路就是用兩層for迴圈,外層for迴圈掃瞄主串x,內層for迴圈用來掃面當前主串x中的字元是否在模式串y中出現,如果出現則去除該字元,即將從該字元往後到主串末尾全部字元往前移動一位。但這樣每次得掃瞄模式串,我們可以考慮用雜湊表儲存模式串中出現的字元,即hashtable[*str]==1,然後只需在主串掃瞄時與雜湊表中對應字元的下標中的值比較,若為1則表示應該去除。但這僅僅只降低了掃瞄模式串的複雜度.

接下來應該考慮減少在主串x中移動當前字元後面字元的次數。我們知道,事實上我們不需要每次刪除主串x中某個字元時就移動餘下的全部字元,當乙個字元需要被刪除的時候,我們把它所佔的位置讓它後面的字元來覆蓋,也就相當於刪除了這個字元。基於快速排序對氣泡排序改進的思路,我們可以用兩個指標first,second,初始時都指向主串的起始位置,然後判斷first指向的字元是否需要刪除,是則first直接跳過,指向下乙個字元。如果first指向的字元是不需要刪除的字元,那麼把first指向的字元賦值給second指向的字元,然後first和second同時向後移動指向下乙個字元,直至first指標到達主串x的末尾。這樣時間複雜度降低到了o(n).

基於上述思路**如下:

刪除字串中的子串

請編寫乙個函式,刪除乙個字串的一部分。函式原型如下 int del substr char str,char const substr 函式首先應判斷substr是否出現在str中。如果它並未出現,函式就返回0 如果出現,函式應該把str中位於該子串後面的所有字元複製到該子串的位置,從而刪除這個子串...

刪除字串中的子串

輸入2個字串s1和s2,要求刪除字串s1 現的所有子串s2,即結果字串中不能包含s2。輸入格式 輸入在2行中分別給出不超過80個字元長度的 以回車結束的2個非空字串,對應s1和s2。輸出格式 在一行中輸出刪除字串s1 現的所有子串s2後的結果字串。輸入樣例 tomcat is a male ccat...

刪除字串中的子串

輸入2個字串s1和s2,要求刪除字串s1 現的所有子串s2,即結果字串中不能包含s2。輸入格式 輸入在2行中分別給出不超過80個字元長度的 以回車結束的2個非空字串,對應s1和s2。輸出格式 在一行中輸出刪除字串s1 現的所有子串s2後的結果字串。輸入樣例 tomcat is a male ccat...