Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับ substring ที่เป็น 1 ทั้งหมดในสตริงไบนารีด้วย Python


คำอธิบายปัญหา

กำหนดสตริงไบนารี s หาจำนวน substring ที่ประกอบด้วย **'1' เท่านั้น** Modulo 10^9+7

ตัวอย่าง

s = "100111" → Output: 7

Substrings: "1" (4 ครั้ง), "11" (2 ครั้ง), "111" (1 ครั้ง) = 7

ขั้นตอนการแก้ปัญหา (O(n))

  1. วนลูปตัวอักษร: ตัวนับ a = ความยาว streak ของ '1' ติดต่อกัน
  2. เจอ '0' → a = 0
  3. เจอ '1' → a += 1, count += a (เพิ่ม substring ทุกค่าที่จบที่ตำแหน่นี้)

การตนการทำงาน (Python)

def solve(s):
    a = 0
    count = 0
    for i in range(len(s)):
        if s[i] == "0":
            a = 0
        else:
            a += 1
            count += a
    return count

s = "100111"
print(solve(s))  # Output: 7

อินพุต / เอาต์พุต

Input:  "100111"
Output: 7