这是我参与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;
}
};
复制代码