【每日一题记录】1784. 检查二进制字符串字段

51 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

大家好 我是丝瓜咸蛋汤。今天带来的是一道在LeetCode上的题目,题目难度为简单。就在此为大家分享一下解答思路。

题目阐述

给你一个二进制字符串 s ,该字符串 不含前导零 。

如果 s 包含 零个或一个由连续的 '1' 组成的字段 ,返回 true​​​ 。否则,返回 false 。

如果 s 中 由连续若干个 '1' 组成的字段 数量不超过 1,返回 true​​​ 。否则,返回 false 。

原题目

思路阐述

原题目的中文表达有问题:

输入:s = "1001" 输出:false
解释:字符串中的 1 没有形成一个连续字段。

严重误导人, 这个是因为出现连个1, 如果是因为没形成连续1的话, "1"就应该返回false, 建议作者回去把小学语文老师打一次。

抛开这个,这题目真的挺简单的,直接一道正则表达式就ac了。

代码实现

function checkOnesSegment(s: string): boolean {
  let exp1 = /[1]+[0]+[1]/g;
  return !exp1.test(s);
}

其他思路

这道题目的本质其实就是最左边的1和最右边的1,中间不能有0。尝试一下模拟实现的方法,通过一次遍历计算1的出现次数,达到判断的效果

function checkOnesSegment(s: string): boolean {
    let n = s.length, cnt = 0, idx = 0
    while (idx < n && cnt <= 1) {
        while (idx < n && s[idx] == '0') idx++
        if (idx < n) {
            while (idx < n && s[idx] == '1') idx++
            cnt++
        }
    }
    return cnt <= 1
};

// 作者:AC_OIer
// 链接:https://leetcode.cn/problems/check-if-binary-string-has-at-most-one-segment-of-ones/solution/by-ac_oier-kiu6/
// 来源:力扣(LeetCode)

我是丝瓜咸蛋汤
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!

名片.jpg