Welcome to Subscribe On Youtube
696. Count Binary Substrings
Description
Given a binary string s
, return the number of non-empty 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: s = "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: s = "10101" Output: 4 Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.
Constraints:
1 <= s.length <= 105
s[i]
is either'0'
or'1'
.
Solutions
-
class Solution { public int countBinarySubstrings(String s) { int i = 0, n = s.length(); List<Integer> t = new ArrayList<>(); while (i < n) { int cnt = 1; while (i + 1 < n && s.charAt(i + 1) == s.charAt(i)) { ++i; ++cnt; } t.add(cnt); ++i; } int ans = 0; for (i = 1; i < t.size(); ++i) { ans += Math.min(t.get(i - 1), t.get(i)); } return ans; } }
-
class Solution { public: int countBinarySubstrings(string s) { int i = 0, n = s.size(); vector<int> t; while (i < n) { int cnt = 1; while (i + 1 < n && s[i + 1] == s[i]) { ++cnt; ++i; } t.push_back(cnt); ++i; } int ans = 0; for (i = 1; i < t.size(); ++i) ans += min(t[i - 1], t[i]); return ans; } };
-
class Solution: def countBinarySubstrings(self, s: str) -> int: i, n = 0, len(s) t = [] while i < n: cnt = 1 while i + 1 < n and s[i + 1] == s[i]: cnt += 1 i += 1 t.append(cnt) i += 1 ans = 0 for i in range(1, len(t)): ans += min(t[i - 1], t[i]) return ans
-
func countBinarySubstrings(s string) int { i, n := 0, len(s) var t []int for i < n { cnt := 1 for i+1 < n && s[i+1] == s[i] { i++ cnt++ } t = append(t, cnt) i++ } ans := 0 for i := 1; i < len(t); i++ { ans += min(t[i-1], t[i]) } return ans }