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

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


สมมติว่าเรามีสตริงไบนารี s เราต้องหาจำนวนสตริงย่อยที่มีเพียง "1" เท่านั้น หากคำตอบมีขนาดใหญ่เกินไป ให้แก้ไขผลลัพธ์ 10^9+7

ดังนั้น หากอินพุตเป็น s ="100111" ผลลัพธ์จะเป็น 7 เนื่องจากสตริงย่อยที่มีเพียง "1" คือ ["1", "1", "1", "1", "11" , "11" และ "111"]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • a :=0
  • นับ :=0
  • สำหรับฉันในช่วง 0 ถึงขนาด s - 1 ทำ
    • ถ้า s[i] เหมือนกับ "0" แล้ว
      • a :=0
    • มิฉะนั้น
      • a :=a + 1
      • นับ :=นับ + a
  • จำนวนคืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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))

อินพุต

"100111"

ผลลัพธ์

7