Given a binary string s
, return the number of non-empty substrings that have the same number of 0's and 1's, and all the 0
's and all the 1
's in these substrings are grouped consecutively.
Substrings that occur multiple times are counted the number of times they occur.
Solution
由于连续的 \(0\) 和连续的 \(1\), 所以我们只需要统计相邻区间 \(0,1\) 的个数,取最小即可,因为方案数就是最小个数的 \(0/1\)
点击查看代码
class Solution {
private:
int ans=0;
vector<int> cnt;
public:
int countBinarySubstrings(string s) {
int n =s.size();
int cur=1;
for(int i=0;i<n-1;i++){
if(s[i]==s[i+1])cur++;
else{
cnt.push_back(cur);cur=1;
}
}
cnt.push_back(cur);
for(int i=0;i<cnt.size()-1;i++){
//cout<<cnt[i]<<" "<<cnt[i+1]<<endl;
ans += min(cnt[i], cnt[i+1]);
}
return ans;
}
};