给你一个二进制字符串 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'
直接遍历字符串,获取“0 子串”和“1 子串”的最大长度 len0
、len1
。
遍历结束后,若 len1 > len0
,返回 true,否则返回 false。
class Solution:
def checkZeroOnes(self, s: str) -> bool:
n0 = n1 = 0
t0 = t1 = 0
for c in s:
if c == '0':
t0 += 1
t1 = 0
else:
t0 = 0
t1 += 1
n0 = max(n0, t0)
n1 = max(n1, t1)
return n1 > n0
class Solution {
public boolean checkZeroOnes(String s) {
int n0 = 0, n1 = 0;
int t0 = 0, t1 = 0;
for (int i = 0; i < s.length(); ++i) {
if (s.charAt(i) == '0') {
++t0;
t1 = 0;
} else {
++t1;
t0 = 0;
}
n0 = Math.max(n0, t0);
n1 = Math.max(n1, t1);
}
return n1 > n0;
}
}
/**
* @param {string} s
* @return {boolean}
*/
var checkZeroOnes = function (s) {
let max0 = 0,
max1 = 0;
let t0 = 0,
t1 = 0;
for (let char of s) {
if (char == '0') {
t0++;
t1 = 0;
} else {
t1++;
t0 = 0;
}
max0 = Math.max(max0, t0);
max1 = Math.max(max1, t1);
}
return max1 > max0;
};
class Solution {
public:
bool checkZeroOnes(string s) {
int n0 = 0, n1 = 0;
int t0 = 0, t1 = 0;
for (auto c : s) {
if (c == '0') {
++t0;
t1 = 0;
} else {
++t1;
t0 = 0;
}
n0 = max(n0, t0);
n1 = max(n1, t1);
}
return n1 > n0;
}
};
func checkZeroOnes(s string) bool {
n0, n1 := 0, 0
t0, t1 := 0, 0
for _, c := range s {
if c == '0' {
t0++
t1 = 0
} else {
t1++
t0 = 0
}
n0 = max(n0, t0)
n1 = max(n1, t1)
}
return n1 > n0
}
func max(a, b int) int {
if a > b {
return a
}
return b
}