题目
给你一个二进制字符串 s ,该字符串 不含前导零 。
如果 s 包含 零个或一个由连续的 ‘1’ 组成的字段 ,返回 true 。否则,返回 false 。
如果 s 中 由连续若干个 ‘1’ 组成的字段 数量不超过 1,返回 true 。否则,返回 false 。
示例 1:
输入:s = "1001" 输出:false 解释:由连续若干个 '1' 组成的字段数量为 2,返回 false
示例 2:
输入:s = "110" 输出:true
解题
方法一:状态机
如果出现 1—>0---->1这个状态变化,就return false;
class Solution { public: bool checkOnesSegment(string s) { int state=0;//0:还没遇到1, 1:遇到1 2:连续1后首次遇到0 3:第二个连续1 for(char c:s){ if(state==0&&c=='1'){ state=1; }else if(state==1&&c=='0'){ state=2; }else if(state==2&&c=='1'){ return false; } } return true; } };