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.
由于连续的 \(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; } };