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