1869. 哪种连续子字符串更长

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

1869. 哪种连续子字符串更长

给你一个二进制字符串 s 。如果字符串中由 1 组成的 最长 连续子字符串 严格长于 由 0 组成的 最长 连续子字符串,返回 true ;否则,返回 false 。

例如,s = "110100010" 中,由 1 组成的最长连续子字符串的长度是 2 ,由 0 组成的最长连续子字符串的长度是 3 。 注意,如果字符串中不存在 0 ,此时认为由 0 组成的最长连续子字符串的长度是 0 。字符串中不存在 1 的情况也适用此规则。

 

示例 1:

输入:s = "1101" 输出:true 解释: 由 1 组成的最长连续子字符串的长度是 2:"1101" 由 0 组成的最长连续子字符串的长度是 1:"1101" 由 1 组成的子字符串更长,故返回 true 。 示例 2:

输入:s = "111000" 输出:false 解释: 由 1 组成的最长连续子字符串的长度是 3:"111000" 由 0 组成的最长连续子字符串的长度是 3:"111000" 由 1 组成的子字符串不比由 0 组成的子字符串长,故返回 false 。 示例 3:

输入:s = "110100010" 输出:false 解释: 由 1 组成的最长连续子字符串的长度是 2:"110100010" 由 0 组成的最长连续子字符串的长度是 3:"110100010" 由 1 组成的子字符串不比由 0 组成的子字符串长,故返回 false 。  

提示:

1 <= s.length <= 100 s[i] 不是 '0' 就是 '1'

class Solution {
public:
    bool checkZeroOnes(string s) {
        int mx0 = 0;
        int mx1 = 0;
        char prev = '#';   // 上个字符
        int cnt = 0;
        for (char ch: s){
            // 当前字符与上个字符相等
            if (ch == prev){
                ++cnt;
            }
            // 当前字符与上个字符不相等
            else{
                if (prev == '0'){
                    mx0 = max(mx0, cnt);
                }
                else if (prev == '1'){
                    mx1 = max(mx1, cnt);
                }
                cnt = 1;
            }
            prev = ch;
        }
        // 字符串结尾的连续子串
        if (prev == '0'){
            mx0 = max(mx0, cnt);
        }
        else if (prev == '1'){
            mx1 = max(mx1, cnt);
        }
        return mx1 > mx0;
    }
};

复制代码

Guess you like

Origin juejin.im/post/7034536387122724901