《编程之法》:字符串的包含

来源:互联网 发布:soap json 编辑:程序博客网 时间:2024/05/14 03:07

题目

给定一长字符串a和一短字符串b。请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中。

思路

设一个整数hash,对于a中的每一位,通过’|’运算在二进制hash对应的位上置位。然后对于b中的每一位,通过’&’运算看是否hash中该位上是否有置位,以此来判断是否有包含该字符。

代码

bool StringContain(const string a,const string b) {    int hash = 1;    for (int i = 0; i < a.length(); ++i) {        hash |= (1 << (a[i] - 'A'));    }    for (int j = 0; j < b.length(); ++j) {        if ((hash & (1 << (b[j] - 'A'))) == 0) {            return false;        }    }    return true;}int main() {    string a = "ABCDE";    string b = "DEA";    string c = "DEF";    if (StringContain(a, b)) {        cout<<"a contains b"<<endl;    } else {        cout<<"a doesn't contain"<<endl;    }    if (StringContain(a, c)) {        cout<<"a contains c"<<endl;    } else {        cout<<"a doesn't contain c"<<endl;    }    return 0;}

运行结果

a contains ba doesn't contain cProcess finished with exit code 0
0 0