0696. Count Binary Substrings (E)

Count Binary Substrings (E)

题目

Give a string s, count the number of non-empty (contiguous) 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.

Example 1:

Input: "00110011"
Output: 6
Explanation: There are 6 substrings that have equal number of consecutive 1's and 0's: "0011", "01", "1100", "10", "0011", and "01".

Notice that some of these substrings repeat and are counted the number of times they occur.

Also, "00110011" is not a valid substring because all the 0's (and 1's) are not grouped together.

Example 2:

Input: "10101"
Output: 4
Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.

Note:

s.length will be between 1 and 50,000.

s will only consist of "0" or "1" characters.


题意

给定一个只包含1和0的字符串,取子串使满足:子串中字符1排在一起,字符0排在一起,且1的个数和0的个数相等,求这样的子串的个数。

思路

从左到右遍历字符串,将所有连续的字符归纳为一个组,相邻组A和B必定是不同字符的集合,那么A和B能组成的有效的子串的个数为min(A.len, B.len)。


代码实现

Java

class Solution {
    public int countBinarySubstrings(String s) {
        int count = 0;
        int pre = 0, cur = 1;
        
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == s.charAt(i - 1)) {
                cur++;
            } else {
                count += Math.min(pre, cur);
                pre = cur;
                cur = 1;
            }
        }
        count += Math.min(pre, cur);
        
        return count;
    }
}
原文地址:https://www.cnblogs.com/mapoos/p/14694134.html