C++中计算二进制子字符串

假设我们有一个字符串s,我们必须找到具有相同数量的0和1的连续子字符串的计数,并且这些子字符串中的所有0和所有1都被连续分组。如果子字符串出现多次,则计算它们出现的次数。

因此,如果输入类似于“ 11001100”,则输出将为6,因为子字符串为“ 1100”,“ 10”,“ 0011”,“ 01”,“ 1100”,“ 10”。

为了解决这个问题,我们将遵循以下步骤-

  • 定义大小为2的数组cnt,并用0填充

  • res:= 0

  • 对于初始化i:= 0,当i <s的长度时,更新(将i增加1),执行-

    • (将res增加1)

    • cnt [num]:= 0

    • num:= s [i]-ASCII'0'

    • 如果i等于0或s [i]不等于s [i-1],则-

    • (将cnt [num]增加1)

    • 如果cnt [num] <= cnt [1-num],则-

    • 返回资源

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int countBinarySubstrings(string s) {
          int cnt[2] = { 0 };
          int res = 0;
          for (int i = 0; i < s.length(); ++i) {
             int num = s[i] - '0';
             if (i == 0 || s[i] != s[i - 1])
                cnt[num] = 0;
             ++cnt[num];
             if (cnt[num] <= cnt[1 - num])
                ++res;
          }
          return res;
       }
    };
    main(){
       Solution ob;
       cout << (ob.countBinarySubstrings("11001100"));
    }

    输入项

    "11001100"

    输出结果

    6