這道題可以採用常規思路實現,對於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...