LeetCode1869. 哪种连续子字符串更长(C++)

Posted 啥也不想,只想搞钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode1869. 哪种连续子字符串更长(C++)相关的知识,希望对你有一定的参考价值。

1 题目描述

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

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

2 示例描述

2.1 示例1

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

2.2 示例2

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

2.3 示例3

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

3 解题提示

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

4 解题思路

官方的题解思路,还有没有大佬帮我看看详解二是哪出错了?

5 源码详解(C++)

class Solution {
public:
    bool checkZeroOnes(string s) 
    {
        int res_0 = 0;
        int res_1 = 0;
        char prev = '#';   // 上个字符
        int temp = 0;
        for (int i = 0 ; i < s.length() ; i ++ )
        {
            // 当前字符与上个字符相等
            if (s[i] == prev)
            {
                temp ++ ;
            }
            // 当前字符与上个字符不相等
            else
            {
                if (prev == '0')
                {
                    res_0 = max(res_0, temp);
                }
                else if (prev == '1')
                {
                    res_1 = max(res_1, temp);
                }
                temp = 1;
            }
            prev = s[i];
        }
        // 字符串结尾的连续子串
        if (prev == '0')
        {
            res_0 = max(res_0, temp);
        }
        else if (prev == '1'){
            res_1 = max(res_1, temp);
        }
        return res_1 > res_0;
    }
};

6 源码详解(C++)错误

class Solution {
public:
    bool checkZeroOnes(string s) {
        int res_1 = 1 ; 
        int res_0 = 1 ;
        int temp_1 = 1 ;
        int temp_0 = 1 ;
        for ( int i = 0 ; i < s.length() - 1 ; i ++ )
        {
            if (s[i] = 0 && s[i + 1] == 0)
            {
                temp_0 ++ ;
            }
            else
            {
                if ( temp_0 > res_0 )
                {
                    res_0 = temp_0 ;
                }
                temp_0 = 1 ;
            }

            if (s[i] = 1 && s[i + 1] == 1)
            {
                temp_1 ++ ;
            }
            else
            {
                if ( temp_1 > res_1 )
                {
                    res_1 = temp_1 ;
                }
                temp_1 = 1 ;
            }
        }
        if ( res_0 >= res_1)
        {
            return false ;
        }
        return true ;
    }
};

以上是关于LeetCode1869. 哪种连续子字符串更长(C++)的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:38.哪种连续子字符串更长

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

单周赛 242 题解

LeetCode523. 连续的子数组和/394. 字符串解码/牛客:万万没想到之抓捕孔连顺

Leetcode.1849 将字符串拆分为递减的连续值

LeetCode 2024 考试的最大困扰度[滑动窗口] HERODING的LeetCode之路