給定兩個字串,從A中刪除存在於B中的字元

2021-09-30 11:31:09 字數 867 閱讀 3079

這道題可以採用常規思路實現,對於a中的每乙個字元,遍歷b查詢是否還有該字元,如果有的話則進行刪除操作,這種做法時間複雜度為o(n^2)。

採用位圖實現能夠到達更好的時間效率,下面採用點陣圖來解決這個問題。

由於anscii碼總共只有256個字元,那麼用8個unsigned int變數可完全表示,空間複雜度為常量複雜度o(1)。

首先遍歷b字串,若b中字元對應的ascii值為n,就將點陣圖的第n位置1。然後遍歷字串a,查詢字串a中字元在位圖中對應的值,刪除點陣圖值為1的字元。

需要說明的是不要每刪除乙個元素都將後面的所有元素前移一遍,這樣實際的演算法時間複雜度是o(n^2)。

其實可以這樣做,設定兩個下標,i、j,如果不刪除字元a[i]的話,把a[i]賦給a[j],如果要刪除,直接使i加1跳過要刪除字元,不對a[j]進行賦值,這樣就以時間複雜度o(n)的代價完成了刪除操作。

實現**:

#include "stdafx.h"

#include using namespace std;

namespace deletesamechar

stra[j] = '\0';

} void test()

; const char*strb = "ian";

cout << stra << endl;

deletesamechar(stra, strb);

cout << stra << endl; }}

int _tmain(int argc, _tchar* ar**)

執行結果:

給定兩個字串,求相同char

string notsame const string a,const string b return result 1.找相同 時間最快的為hash,空間時間tradeoff的可以用vector 突然意識到 set只能適用於string a中沒有重複字元的情況。因此還得用map實現 set ins...

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...