g0601_0700.s0696_count_binary_substrings.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0601_0700.s0696_count_binary_substrings;
// #Easy #String #Two_Pointers #2022_03_22_Time_5_ms_(100.00%)_Space_42.5_MB_(91.17%)
/**
* 696 - Count Binary Substrings\.
*
* Easy
*
* Give 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'`.
**/
public class Solution {
public int countBinarySubstrings(String s) {
int start = 0;
int ans = 0;
char[] arr = s.toCharArray();
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1]) {
ans++;
start = i - 1;
} else if (start > 0 && arr[--start] != arr[i]) {
// if start isn't 0, we may still have a valid substring
ans++;
} else {
// if not, then reset start to 0
start = 0;
}
}
return ans;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy