สมมติว่าเรามีสตริงไบนารี s เราต้องหาจำนวนสตริงย่อยที่มีอักขระ 1 ตัวทั้งหมด คำตอบอาจมีขนาดใหญ่มาก ดังนั้นส่งคืนผลลัพธ์ mod 10^9 + 7
ดังนั้น หากอินพุตเป็นเหมือน s ="1011010" ผลลัพธ์จะเป็น 5 เพราะ 1. สี่คูณ "1" 2. หนึ่งครั้ง "11"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ม :=10^9+7
-
ผลลัพธ์ :=0
-
div :=แบ่งสตริงไบนารีโดยแยกโดยใช้ '0'
-
สำหรับแต่ละ x ใน div ทำ
-
ถ้า x ว่าง ให้ทำซ้ำต่อไป
-
ผล :=ผล + ผลหารของ (ขนาด x *(ขนาด x +1))/2
-
-
ส่งคืนผลลัพธ์ mod m
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
def solve(s): m = 10**9+7 result = 0 for x in s.split('0'): if not x: continue result += (len(x)*(len(x)+1)) // 2 return result % m s = "1011010" print(solve(s))
อินพุต
"1011010"
ผลลัพธ์
5