持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
刷题的日常-2022年10月3号
一天一题,保持脑子清爽
检查二进制字符串字段
来自leetcode的 1784 题,题意如下:
给你一个二进制字符串 s ,该字符串 不含前导零 。
如果 s 包含 零个或一个由连续的 '1' 组成的字段 ,返回 true 。否则,返回 false 。
如果 s中由连续若干个'1' 组成的字段数量不超过 1,返回 true 。否则,返回 false 。
示例1:
输入: s = "1001"
输出: false
解释: 由连续若干个 '1' 组成的字段数量为 2,返回 false
示例2:
输入: s = "110"
输出: true
理解题意
我们可以从题意中提取的条件如下:
- 题目给出一个字符串,要求我们对其做判断
- 如果字符串中有1,那么它们必须是连续的,不能中间插入0
- 字符串中没有前导零,这意味着1必须在开头处,往后连续的
做题思路
因为没有前导零,所以我们可以直接从开头开始往后连续一直判断是否是1,如果是的话就继续,不是的话就停止,具体的步骤如下:
- 开辟一个索引空间用来记录当前位置
- 循环进行判断,第一个循环是用来判断开头1连续的数量,如果全是1,那么返回true即可
- 如果前一个循环没能走到结尾,那就是碰见0的情况
- 这个时候就需要判断0的个数
- 循环判断0的个数
- 遇到1就退出
- 最后直接判断索引走到最后即可,因为没走到最后说明又出现了1的情况,不符合题意
代码实现
代码实现如下:
public class Solution {
public boolean checkOnesSegment(String s) {
int idx = 0;
while (idx < s.length() && s.charAt(idx) == '1') {
idx++;
}
if (idx == s.length()) {
return true;
}
while (idx < s.length() && s.charAt(idx) == '0') {
idx++;
}
return idx >= s.length();
}
}