字符串是否包含問題

//假設這有兩個分別由字母組成的字符串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;
}
相關文章
相關標籤/搜索