持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
大家好 我是丝瓜咸蛋汤。今天带来的是一道在LeetCode上的题目,题目难度为简单
。就在此为大家分享一下解答思路。
题目阐述
给你一个二进制字符串 s ,该字符串 不含前导零 。
如果 s 包含 零个或一个由连续的 '1' 组成的字段 ,返回 true 。否则,返回 false 。
如果 s 中 由连续若干个 '1' 组成的字段 数量不超过 1,返回 true 。否则,返回 false 。
思路阐述
原题目的中文表达有问题:
输入:s = "1001" 输出:false
解释:字符串中的 1 没有形成一个连续字段。严重误导人, 这个是因为出现连个1, 如果是因为没形成连续1的话, "1"就应该返回false, 建议作者回去把小学语文老师打一次。
抛开这个,这题目真的挺简单的,直接一道正则表达式就ac了。
代码实现
function checkOnesSegment(s: string): boolean {
let exp1 = /[1]+[0]+[1]/g;
return !exp1.test(s);
}
其他思路
这道题目的本质其实就是最左边的1和最右边的1,中间不能有0。尝试一下模拟实现的方法,通过一次遍历计算1的出现次数,达到判断的效果
function checkOnesSegment(s: string): boolean {
let n = s.length, cnt = 0, idx = 0
while (idx < n && cnt <= 1) {
while (idx < n && s[idx] == '0') idx++
if (idx < n) {
while (idx < n && s[idx] == '1') idx++
cnt++
}
}
return cnt <= 1
};
// 作者:AC_OIer
// 链接:https://leetcode.cn/problems/check-if-binary-string-has-at-most-one-segment-of-ones/solution/by-ac_oier-kiu6/
// 来源:力扣(LeetCode)
我是丝瓜咸蛋汤
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!