1. 程式人生 > 實用技巧 >LeetCode 696 計數二進位制子串

LeetCode 696 計數二進位制子串

Leetcode 696 計數二進位制子串

給定一個只包含0,1的字串,假設一個連續子串中若包含相同數量的0,1且不交錯分佈則為一個滿足要求的子串,求給定字串中有多少個滿足要求的子串。
方法: 交替對連續的0,1子串進行計數。當已經計數有last個連續的0時,若接下來又計數有count個連續的1,則last個0、count個1組成的子串中滿足要求的子串一共有min(last, count)個

執行用時:10 ms, 在所有 Java 提交中擊敗了87.83%的使用者
記憶體消耗:40.2 MB, 在所有 Java 提交中擊敗了61.54%的使用者

class Solution { 
    public int countBinarySubstrings(String s) {
        int ptr = 0, n = s.length(), last = 0, ans = 0;
        while (ptr < n) {
            //c記錄每一次記錄的子串元素
            char c = s.charAt(ptr);
            //記錄當前子串中相同字元c的數量
            int count = 0;
            while (ptr < n && s.charAt(ptr) == c) {
                ++ptr;
                ++count;
            }
            //結果值更新
            ans += Math.min(count, last);
            last = count;
        }
        return ans;
    }
}