Count Binary Substrings

easy string two pointers

Problem

Given a binary string s, return the number of non-empty substrings that have the same number of 0s and 1s, with all the 0s and all the 1s grouped consecutively.

Inputs = "00110011"
Output6
Valid substrings: "0011", "01", "1100", "10", "0011", "01".

def count_binary_substrings(s):
    prev, cur, ans = 0, 1, 0
    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            cur += 1
        else:
            ans += min(prev, cur)
            prev, cur = cur, 1
    return ans + min(prev, cur)
function countBinarySubstrings(s) {
  let prev = 0, cur = 1, ans = 0;
  for (let i = 1; i < s.length; i++) {
    if (s[i] === s[i-1]) cur++;
    else { ans += Math.min(prev, cur); prev = cur; cur = 1; }
  }
  return ans + Math.min(prev, cur);
}
class Solution {
    public int countBinarySubstrings(String s) {
        int prev = 0, cur = 1, ans = 0;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == s.charAt(i-1)) cur++;
            else { ans += Math.min(prev, cur); prev = cur; cur = 1; }
        }
        return ans + Math.min(prev, cur);
    }
}
int countBinarySubstrings(string s) {
    int prev = 0, cur = 1, ans = 0;
    for (int i = 1; i < (int)s.size(); i++) {
        if (s[i] == s[i-1]) cur++;
        else { ans += min(prev, cur); prev = cur; cur = 1; }
    }
    return ans + min(prev, cur);
}
Time: O(n) Space: O(1)