696.计数二进制字串

696.计数二进制字串

image-20200810202924543

题解

​ 本题有一个隐藏结论:由形如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;
    }
}

猜你喜欢

转载自blog.csdn.net/Rush6666/article/details/107921498