【LeetCode】1869. 哪种连续子字符串更长
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 boolean checkZeroOnes(String s) {
int maxOneL = 0;
int maxZeroL = 0;
int count = 0;
boolean oneFlag = false;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '0' && oneFlag || s.charAt(i) == '1' && !oneFlag) {
maxOneL = oneFlag ? Math.max(maxOneL, count) : maxOneL;
maxZeroL = oneFlag ? maxZeroL : Math.max(maxZeroL, count);
count = 1;
oneFlag = !oneFlag;
} else {
count++;
}
}
maxOneL = oneFlag ? Math.max(maxOneL, count) : maxOneL;
maxZeroL = oneFlag ? maxZeroL : Math.max(maxZeroL, count);
return maxOneL > maxZeroL;
}
}
可参考题解
class Solution {
public boolean checkZeroOnes(String s) {
int n = s.length();
int i = 0, oneMax = 0, zeroMax = 0;
while(i < n) {
int oneLength = 0, zeroLength = 0;
while(i < n && s.charAt(i) == '1') {
oneLength++;
i++;
}
oneMax = Math.max(oneMax, oneLength);
while(i < n && s.charAt(i) == '0') {
zeroLength++;
i++;
}
zeroMax = Math.max(zeroMax, zeroLength);
}
return oneMax > zeroMax;
}
}