持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
国庆第四天了,假期进入下坡路了,很痛苦
检查二进制字符串字段
该题出自力扣的1784题 —— 检查二进制字符串字符【简单题】
审题
给你一个二进制字符串 s ,该字符串 不含前导零 。 如果 s 包含 零个或一个由连续的 '1' 组成的字段 ,返回 true 。否则,返回 false 。 如果 s 中 由连续若干个 '1' 组成的字段 数量不超过 1,返回 true 。否则,返回 false 。
- 该题主要是对字符串的判定,字符串1和0的业务规则
- 首先字符串的首位必定是1,两个业务规则其实说的就是一个,如果有1个或多个1的子字段,并且数量超过1个,则返回true,否则返回false
- 判断字符串是否由左边连续的1和右边连续的0两部分组成,其他的构成都不合法。所以我们只需要找出两个端点然后判断位置就可以了。判断字符串中的所有1是否全部连在一起
- s 包含 零个或一个由连续的 '1' 组成的字段 ,返回 true;
- 解法:
- 定义3个整型变量,一个变量记录出现1的字段,一个记录1的出现数量
- 可以看到两种情况中都不包含 01 串
- 循环字符串,判断字符串当前字符属于‘(’还是‘)’
- 最终返回两个变量是是否满足业务规则
- 时间复杂度:O(n),其中 n 为字符串 s 的长度。
- 空间复杂度:O(1),仅适用常量空间。
编码
class Solution {
public boolean checkOnesSegment(String s) {
int num1 = 0;
int fa1 = 0;
int numIndex = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '1'){
numIndex++;
}else if (s.charAt(i) == '0' && numIndex > 0){
num1++;
fa1++;
numIndex = 0;
}
}
if (numIndex > 0){
num1++;
fa1++;
}
return fa1 <=1 || num1 <= 1;
}
}