LeetCode-696. Count Binary Substrings https://leetcode.com/problems/count-binary-substrings/
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 <= 10^5
s[i]
is either'0'
or'1'
.
【C++】
class Solution {
public:
int countBinarySubstrings(string s) {
int pre = 0, cur = 1, count = 0;
for (int i = 1; i < s.length(); ++i) {
if (s[i] == s[i-1]) {++cur;}
else {
pre = cur;
cur = 1;
}
if (pre >= cur) {++count;}
}
return count;
}
};
或者
class Solution {
public:
int countBinarySubstrings(string s) {
int ans = 0, prev = 0, cur = 1;
for (int i = 1; i < s.length(); i++) {
if (s[i - 1] != s[i]) {
ans += min(prev, cur);
prev = cur;
cur = 1;
} else {cur++;}
}
return ans + min(prev, cur);
}
};
【Java】
class Solution {
public int countBinarySubstrings(String s) {
int pre = 0, cur = 1, count = 0;
for (int i = 1; i < s.length(); ++i) {
if (s.charAt(i) == s.charAt(i-1)) {++cur;}
else {
pre = cur;
cur = 1;
}
if (pre >= cur) {++count;}
}
return count;
}
}
备注:此题的目标结果有问题。