1784. Check if Binary String Has at Most One Segment of Ones

練習日期:2026-03-06

難度:Easy

類型:String

📘 題目敘述

給你一個二進位字串 s,且 s 沒有前導零,若 s 中最多只包含一段連續的 1,回傳 true。否則回傳 false

條件限制

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

🧠 解題思路

我用一個布林變數 check 來記錄「我是否已經進入過 0 的區段」。

因為題目要的是:1 只能出現一段連續區間。所以只要我掃描字串時:

  • 一旦看過 0,之後如果又看到 1,那就代表 1 被分成至少兩段 → 直接 false
  • 如果一路掃完都沒有出現「看過 0 後又遇到 1」的情況 → true

所有變數

  • s:題目輸入的二進位字串
  • check:是否已經遇到過 '0'(也就是是否已經離開第一段的 1
  • a:for 迴圈每次讀到的字元

🪜 主要流程步驟

1. 用 check 記錄是否已經遇到過 0

一開始 check = false,代表目前還沒遇到 0,也就是仍可能在第一段連續的 1 裡。


2. 掃描字串,遇到 '0' 就把 check 設成 true

當我第一次遇到 '0',就表示第一段 1 已經結束了。之後只要再出現 '1',就會形成第二段。


3. 如果 check 已經是 true,卻又遇到 '1',直接回傳 false

這代表字串形狀像 ...1...0...1...1 不再是單一連續段。


4. 全部掃完都沒違規就回傳 true

表示 1 只出現一段(例如 "111""11000""10")。

⏱️ 複雜度

  • 時間複雜度:O(n),其中 n = s.length()
  • 空間複雜度:O(1)

💻 程式碼實作

class Solution {
public:
    bool checkOnesSegment(string s) {
        bool check = false;
        for (char a : s) {
            if (a == '1') {
                if (check) {
                    return false;
                }
            } else {
                check = true;
            }
        }
        return true;
    }
};

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

作者: scottnick
撰寫日期: 2026-03-06
類別:
原文連結: https://scottnick.github.io/cpp-notes/all%20problems/1784-check-if-binary-string-has-at-most-one-segment-of-ones.html