class Solution {
public:
int countBinarySubstrings(string s) {
int res = 0;
//last记录前一种数字个数
//cur记录当前数字个数
int last = 0, cur = 1;//cur先指向首元素
for(int i = 1; i < s.size(); ++i){
if(s[i] == s[i-1]) ++cur;
else{//碰到不同数字
last = cur;
cur = 1;
}
if(last >= cur) ++res;
}
return res;
}
};
或者
class Solution {
public:
int countBinarySubstrings(string s) {
int res = 0;
int i = 0;
int pre = 0, cnt = 0;
while(i < s.size()){
auto c = s[i];
while(i < s.size() && s[i] == c){
++i; ++cnt;
}
res += min(pre, cnt);//满足条件的子串数目为两者的较小值
pre = cnt;
cnt = 0;//重置
}
return res;
}
};