题目
Given a binary string s
without leading zeros, return true
if s
contains at most one contiguous segment of ones. Otherwise, return false
.
给定一个二进制字符串 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 = "11001110001"
那么它有3个连续的1段 分别是: (括号括住的部分)
"(11)00(111)000(1)"
题中给出的字符串 s
不含前导零,也就是说 s
开头的一段一定是连续的 段,而 s
中的连续 段如果超过 个就要返回 false
,所以我们直接跳过开头的一段 ,去枚举后面的字符,如果出现 就返回 false
,如果没有就返回 true
。
代码
class Solution {
public boolean checkOnesSegment(String s) {
int n = s.length();
int i = 0;
while (i < n && s.charAt(i) == '1') ++i;
while (i < n) {
if (s.charAt(i) == '1') return false;
++i;
}
return true;
}
}
方法二:脑筋急转弯
思路
既然 s
不含前导零,那如果字符串中出现了 "01"
这样的子字符串,就说明连续的 段一定超过了一个。
代码
class Solution {
public boolean checkOnesSegment(String s) {
return !s.contains("01");
}
}
评论区