题目描述:https://leetcode.cn/problems/check-if-binary-string-has-at-most-one-segment-of-ones/
题目描述:
给你一个二进制字符串 s
,该字符串 不含前导零 。
如果 s
包含 零个或一个由连续的 '1'
组成的字段 ,返回 true
。否则,返回 false
。
如果 s
中 由连续若干个 '1'
组成的字段 数量不超过 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'
解法:标记
我们可以使用两个变量 start
和 end
来标记是否已经存在连续字符串1
了。遍历字符串,当遇到1
时,我们将start
标记为true
,代表字符串已开始;当遍历到0
时,判断 start==true
并且 end == false
,我们将end
置为true
,代表第一个连续的1字符串已经结束,否则不做任何处理。当再次遍历到1
的话,代表已经是第二个连续字符串1
了,直接返回false
。若正常遍历结束的话,就返回 true
。
代码:
class Solution {
public boolean checkOnesSegment(String s) {
int[] dp = new int[100];
boolean start = false;
boolean end = false;
for(int i = 0;i<s.length();i++) {
if(s.charAt(i) == '1') {
start = true;
if(end == true) {
return false;
}
} else {
if(start == true && end == false) {
end = true;
}
}
}
return true;
}
}