本文最后更新于:2023年3月19日 晚上
Lt1869. 哪种连续子字符串更长
给你一个二进制字符串 s
。如果字符串中由 1
组成的 最长 连续子字符串 严格长于 由 0
组成的 最长 连续子字符串,返回 true
;否则,返回 false
_ _。
- 例如,
s = "**11**01**000**10"
中,由 1
组成的最长连续子字符串的长度是 2
,由 0
组成的最长连续子字符串的长度是 3
。
注意,如果字符串中不存在 0
,此时认为由 0
组成的最长连续子字符串的长度是 0
。字符串中不存在 1
的情况也适用此规则。
示例 1:
1 2 3 4 5 6
| 输入:s = "1101" 输出:true 解释: 由 1 组成的最长连续子字符串的长度是 2:"1101" 由 0 组成的最长连续子字符串的长度是 1:"1101" 由 1 组成的子字符串更长,故返回 true 。
|
示例 2:
1 2 3 4 5 6
| 输入:s = "111000" 输出:false 解释: 由 1 组成的最长连续子字符串的长度是 3:"111000" 由 0 组成的最长连续子字符串的长度是 3:"111000" 由 1 组成的子字符串不比由 0 组成的子字符串长,故返回 false 。
|
示例 3:
1 2 3 4 5 6
| 输入:s = "110100010" 输出:false 解释: 由 1 组成的最长连续子字符串的长度是 2:"110100010" 由 0 组成的最长连续子字符串的长度是 3:"110100010" 由 1 组成的子字符串不比由 0 组成的子字符串长,故返回 false 。
|
提示:
1 <= s.length <= 100
s[i]
不是 '0'
就是 '1'
思路
用 count1,count0 记录连续的数,用 max1、max0 记录最大连续的数,prev 记录上一个数。遍历,计算连续的数的长度并更新 max0、max1。最后判断 max1 是否 max0 即可。
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
var checkZeroOnes = function (s) { let count0 = 0, count1 = 0, prev = s[0], max0 = -Infinity, max1 = -Infinity; for (const num of s) { if (num === prev) { if (num === "0") count0++; else count1++; } else { if (num === "0") count0 = 1; else count1 = 1; } max0 = Math.max(max0, count0); max1 = Math.max(max1, count1); prev = num; } return max1 > max0; };
|