LeetCode 696 計數二進位制子串
阿新 • • 發佈:2020-08-10
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; } }