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