1.题目描述
给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。
重复出现的子串要计算它们出现的次数。
示例 1 :
示例 2 :
注意:
1.s.length 在1到50,000之间。
2.s 只包含“0”或“1”字符。
2.思路
preLen表示上一分组的长度,curLen表示当前分组的长度,当s[i] == s[i-1]时,curLen++,当s[i] !=s[i-1]时,说明当前分组结束,preLen = curLen,且curLen置为1,如果preLen >=curLen,则结果计数加一。
3.代码
class Solution {
public:
int countBinarySubstrings(string s) {
int preLen = 0, curLen = 1, count = 0;
for(int i = 1;i < s.size();++i){
if(s[i] == s[i-1]){
curLen++;
}
else{
preLen = curLen;
curLen = 1;
}
if(preLen >= curLen){
count++;
}
}
return count;
}
};
4.复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)