天天看點

LeetCode_696_計數二進制子串

題目描述:

給定一個字元串 s,計算具有相同數量0和1的非空(連續)子字元串的數量,并且這些子字元串中的所有0和所有1都是組合在一起的。

重複出現的子串要計算它們出現的次數。

輸入示例1:
輸入: "00110011"
輸出: 6
解釋: 有6個子串具有相同數量的連續1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。
請注意,一些重複出現的子串要計算它們出現的次數。
另外,“00110011”不是有效的子串,因為所有的0(和1)沒有組合在一起。      
輸入示例2:
輸入: "10101"
輸出: 4
解釋: 有4個子串:“10”,“01”,“10”,“01”,它們具有相同數量的連續1和0。      
class Solution {
public:
    int countBinarySubstrings(string s) {
        //pre記錄前一組相同的數字個數,cur記錄目前組數字的個數
        int cur = 1, pre = 0, res = 0;
        for (int i = 1; i < s.size(); i++) {
            if (s[i] == s[i - 1]) cur++;
            else {
                res += min(cur, pre);
                pre = cur;
                cur = 1;
            }
        }
        return res + min(cur, pre);
    }
};