LeetCode第 696 题:计数二进制子串(C++)

696. 计数二进制子串 - 力扣(LeetCode)

class Solution {
public:
    int countBinarySubstrings(string s) {
        int res = 0;
        //last记录前一种数字个数
        //cur记录当前数字个数
        int last = 0, cur = 1;//cur先指向首元素
        for(int i = 1; i < s.size(); ++i){
            if(s[i] == s[i-1])  ++cur;
            else{//碰到不同数字
                last = cur;
                cur = 1;
            }
            if(last >= cur)  ++res;
        }
        return res;
    }
};

或者

class Solution {
public:
    int countBinarySubstrings(string s) {
        int res = 0;
        int i = 0;
        int pre = 0, cnt = 0;
        while(i < s.size()){
            auto c = s[i];
            while(i < s.size() && s[i] == c){
                ++i; ++cnt;
            }
            res += min(pre, cnt);//满足条件的子串数目为两者的较小值
            pre = cnt;
            cnt = 0;//重置
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_32523711/article/details/107922617
今日推荐