题目链接:
https://leetcode-cn.com/problems/count-binary-substrings/
难度:简单
696. 计数二进制子串
给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,
并且这些子字符串中的所有0和所有1都是组合在一起的。
重复出现的子串要计算它们出现的次数。
示例 1 :
输入: "00110011"
输出: 6
解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。
请注意,一些重复出现的子串要计算它们出现的次数。
另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。
文字列内の0と1の数が同じであるのは0と1だけです。0
または1は連続している必要があります(たとえば、1100は正しく、1010は正しくありません)
。異なる位置にある同じ文字列も同じと見なされ
ます。。。
連続する同一文字の数を
ベクトルに格納し、ベクトルの隣接する数にminを追加します
举个例子:
字符串: 11100001100
vector: 3 4 2 2
min(3,4) + min(4,2) + min(2,2)=7
class Solution {
public:
int countBinarySubstrings(string s) {
vector<int> vec;
int i=0;
while(i<s.size()){
auto a=s[i];
int count=0;
while(s[i]==a&&i<s.size()){
i++;
count++;
}
vec.push_back(count);
}
int ans=0;
for(int i=0;i<vec.size()-1;++i){
int n=min(vec.at(i),vec.at(i+1));
ans+=n;
}
return ans;
}
};
またint n=min(vec.at(i),vec.at(i+1));
、センテンスベクトルを使用して、それが前のものにのみ関連していることを示すこともできません。
class Solution {
public:
int countBinarySubstrings(string s) {
int i=0;
int pre=0;
int ans=0;
while(i<s.size()){
auto a=s[i];
int count=0;
while(s[i]==a&&i<s.size()){
i++;
count++;
}
ans+=min(pre,count);
pre=count;
}
return ans;
}
};