LeetCode1869. 哪种连续子字符串更长(C++)
Posted 啥也不想,只想搞钱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode1869. 哪种连续子字符串更长(C++)相关的知识,希望对你有一定的参考价值。
1869. 哪种连续子字符串更长
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++)的主要内容,如果未能解决你的问题,请参考以下文章