สมมติว่าเรามีสตริงบाइनารี s (ไม่มีศูนย์นำหน้า) เราต้องตรวจสอบว่า s มีช่วงติดกันของ 1 ได้มากสุด 1 ช่วงหรือไม่
เช่น s = "11100" ผลลัพธ์คือ True เพราะมีช่วง 1 เพียงช่วงเดียวคือ "111"
ขั้นตอนการแก้ปัญหา
- count = -1
- ถ้า len(s) == 1: คืน True
- วนลูปแต่ละ i ใน s:
- ถ้า i == "1" และ count > -1: คืน False (เจอ 1 ช่วงที่สอง)
- มิฉะนั้นถ้า i == "0": count += 1 (นับการเปลี่ยนจาก 1 เป็น 0)
- คืน True
ตัวอย่างโค้ด
def solve(s):
count = -1
if len(s) == 1:
return True
for i in s:
if i == "1" and count > -1:
return False
elif i == "0":
count += 1
return True
s = "11100"
print(solve(s))
ข้อมูลเข้า
11100
ข้อมูลออก
True