//假設這有兩個分別由字母組成的字符串A另外字符串B,字符串B的字母數較字符串A少一些。 //什麼方法能最快地查出字符串B全部字母是否是都在字符串A裏? //也就是說判斷字符串B是否是字符串A的真子集(爲了簡化,姑且認爲兩個集合都不是空集,即字符串都不爲空。)。爲了簡單起見,咱們規定輸入的字符串只包含大寫英文字母。 //實現函數bool compare(string &A,string &B) //int 32位,使用一個整數來hash #include <iostream> using namespace std; bool compare(string &a,string &b) { int hash_b=0; for(int i=0;i<b.length();i++) { hash_b|=(1<<(b[i]-'A')); } int hash_a=0; for(int i=0;i<a.length();i++) { hash_a|=(1<<(a[i]-'A')); } return hash_b==(hash_a&hash_b); } int main() { string a("ABCDEFGHG"); string b("BCDHGK"); cout<<compare(a,b)<<"\n"; return 0; }