使用BIT Manipulation检查两个字符串中是否存在公共子字符串

时间:2016-06-27 14:25:34

标签: c++ bit-manipulation substring

以下代码用于检查两个字符串是否具有公共子字符串,如果存在公共子字符串则打印YES;如果没有公共子字符串,则显示NO。 线号No:7到底是做什么的?请解释一下。

    1     #include<iostream>
    2     using namespace std;
    3    
    4     int letterBits(const string &s) {
    5        int bits = 0;
    6        for (char ch : s)
    7            bits |= 1 << (ch - 'a');
    8        return bits;
   10     }
   11     
   12     int main() {
   13         int testCases;
   14         cin >> testCases;
   15         while (testCases--) {
   16             string strA, strB;
   17             cin >> strA >> strB;
   18             int bitsA = letterBits(strA);
   19             
   20             int bitsB = letterBits(strB);
   21             cout<<bitsB<<" ";
   22             cout << (bitsA & bitsB ? "YES": "NO") << endl;
   23         }
   24         return 0;
   25     }

1 个答案:

答案 0 :(得分:1)

第7行为它找到的每个字母设置一个整数位。 (例如,如果字母是'a'则设置位0,如果字母是'b'则设置位1等)。

此方法仅检查2个字符串是否具有相同的字母,因此“abc”==“cba”。