Skip to content

E1784.检查二进制字符串字段

string, https://leetcode.cn/problems/check-if-binary-string-has-at-most-one-segment-of-ones/

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

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

示例 1:

输入:s = "1001"
输出:false
解释:由连续若干个 '1' 组成的字段数量为 2,返回 false

示例 2:

输入:s = "110"
输出:true

提示:

  • 1 <= s.length <= 100
  • s[i]'0''1'
  • s[0]'1'

题意解析

给定一个不含前导零的二进制字符串 s(即 s[0] == '1'),判断其中 连续的 '1' 组成的段(segment)是否最多只有一个

关键观察

因为字符串'1' 开头,所以第一个字符就是 '1'。 如果后面在某个 '0' 之后又出现了 '1',那就说明出现了第二个 '1',应该返回 False

解法思路

遍历字符串,设置一个标志表示是否已经“进入0区”:

  • 初始时还没遇到 '0'
  • 遇到 '0' 后,标记为“已进入0区”;
  • 如果在“已进入0区”后又遇到 '1',直接返回 False
  • 遍历完都没问题,返回 True

或者更简单一点:检查是否在字符串中存在 "01" 子串

代码实现

方法一:使用子串判断(最简洁)

python
class Solution:
    def checkOnesSegment(self, s: str) -> bool:
        return "01" not in s

方法二:手动遍历(更直观)

python
class Solution:
    def checkOnesSegment(self, s: str) -> bool:
        seen_zero = False
        for c in s:
            if c == '0':
                seen_zero = True
            elif seen_zero and c == '1':
                return False
        return True