2021.12.29>>第 242 场周赛

129 阅读2分钟

题目

1869. 哪种连续子字符串更长

1870. 准时到达的列车最小时速

1871. 跳跃游戏 VII

1872. 石子游戏 VIII

题解 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

快慢指针

慢指针等于每次子字符串的起点,快指针从该起点出去,直到碰到与起点不同的字符,判断长度

下次循环的起点等于此时快指针的位置,不用担心当l等于数组最后的位置,因为使用的++r,所以即使在最后,r也是会比l大于1

var checkZeroOnes = function(s) {
  let max0 = 0
  let max1 = 0
  let l = 0;
  while(l < s.length){
    let r = l;
    while(s[++r] === s[l]){}
    if(s[l] == 0){max0 = max0 > r - l ? max0 : r - l}
    else{max1 = max1 > r - l ? max1 : r - l}
    l = r;
  }
 
  return max0 < max1 ? true : false
};