1784. Check if Binary String Has at Most One Segment of Ones
Description
Given a binary string s without leading zeros, return true if s contains at most one contiguous segment of ones. Otherwise, return false.
Example 1:
Input: s = "1001" Output: false Explanation: The string has two segments of size 1.
Example 2:
Input: s = "110" Output: true
Constraints:
1 <= s.length <= 100s[i] is either'0'or'1'.s[0]is'1'.
Solutions
Solution 1: Brain Teaser
Thinking
The string starts with \(1\) and has no leading zeros. A second run of ones appears iff a \(0\) is later followed by a \(1\), i.e. the substring \(01\) occurs.
Testing for \(01\) is enough; we need not count runs.
Since the string \(s\) has no leading zeros, \(s\) starts with '1'.
If the string \(s\) contains the substring "01", then \(s\) is of the form "1...01...", which means \(s\) has at least two separate segments of consecutive '1's, violating the condition — return \(\textit{false}\).
If the string \(s\) does not contain the substring "01", then \(s\) can only be of the form "1..1000...", which means \(s\) has exactly one segment of consecutive '1's, satisfying the condition — return \(\textit{true}\).
Therefore, we only need to check whether the string \(s\) contains the substring "01".
The time complexity is \(O(n)\), where \(n\) is the length of the string \(s\). The space complexity is \(O(1)\).
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 6 | |
1 2 3 | |
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 6 7 | |