题目
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 <= 100s[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");
}
}
评论区