主页有其他数据结构内容(持续更新中)
难度:Easy
代码:
class Solution {
public:
int countBinarySubstrings(string s) {
vector<int> counts;
int ptr = 0;
int n = s.size();
while (ptr < n) {
char c = s[ptr];
int count = 0;
while (ptr < n && s[ptr] == c) {
++ptr;
++count;
}
counts.emplace_back(count);
}
int ans = 0;
// 假设counts数组中两个相邻的数字为u或者v,它们对应着u个0和v个1,或者u个1和v个0
// 它们能组成的满足条件的子串数目为min{u,v}
for (int i = 1; i < counts.size(); ++i) {
ans += min(counts[i], counts[i - 1]);
}
return ans;
}
};