696.计数二进制字串
题解
本题有一个隐藏结论:由形如00111,或11100的字符串,符合要求的字串数量为Math.min(n,m),其中n,m为连续字符的个数,如000111111的n=3,m=6。而得到连续字符序列{1,3,2,3},表示字符串若为0开头,则是011100111,符合要求的字串数量为min(1,3)+min(3,2)+min(2,3)
class Solution {
public int countBinarySubstrings(String s) {
int ptr = 0, n = s.length(), last = 0, ans = 0;
while (ptr < n) {
char c = s.charAt(ptr);
int count = 0;
while (ptr < n && s.charAt(ptr) == c) {
++ptr;
++count;
}
ans += Math.min(count, last);
last = count;
}
return ans;
}
}