題目描述:
給定一個字元串 s,計算具有相同數量0和1的非空(連續)子字元串的數量,并且這些子字元串中的所有0和所有1都是組合在一起的。
重複出現的子串要計算它們出現的次數。
輸入示例1:
輸入: "00110011"
輸出: 6
解釋: 有6個子串具有相同數量的連續1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。
請注意,一些重複出現的子串要計算它們出現的次數。
另外,“00110011”不是有效的子串,因為所有的0(和1)沒有組合在一起。
輸入示例2:
輸入: "10101"
輸出: 4
解釋: 有4個子串:“10”,“01”,“10”,“01”,它們具有相同數量的連續1和0。
class Solution {
public:
int countBinarySubstrings(string s) {
//pre記錄前一組相同的數字個數,cur記錄目前組數字的個數
int cur = 1, pre = 0, res = 0;
for (int i = 1; i < s.size(); i++) {
if (s[i] == s[i - 1]) cur++;
else {
res += min(cur, pre);
pre = cur;
cur = 1;
}
}
return res + min(cur, pre);
}
};