题目
给定一长字符串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 b
a doesn't contain c
Process finished with exit code 0