สมมติว่าเรามีสตริงไบนารี s ตอนนี้ ให้เราพิจารณาการดำเนินการ โดยเราแยกสตริงออกเป็นสองสตริงย่อยที่ไม่ว่างเปล่า s1 และ s2 คะแนนของการแยกนี้คือผลรวมของจำนวน "0" ใน s1 และผลรวมของ "1" ใน s2 เราต้องหาคะแนนสูงสุดให้ได้
ดังนั้น หากอินพุตเป็น s ="011001100111" ผลลัพธ์จะเป็น 8 เพราะเราสามารถแยกสตริงเช่น "01100" + "110111" คะแนนคือ 3 + 5 =8
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
คน :=จำนวน "1" ใน s
-
ศูนย์ :=0
-
ตอบ :=0
-
สำหรับฉันในช่วง 0 ถึงขนาด s - 2 ทำ
-
ถ้า s[i] เหมือนกับ "0" แล้ว
-
ศูนย์ :=ศูนย์ + 1
-
-
มิฉะนั้น
-
คน :=คน - 1
-
-
ans :=สูงสุดของ ans และ (หนึ่ง + ศูนย์)
-
-
กลับมาอีกครั้ง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
def solve(s): ones = s.count("1") zeros = 0 ans = 0 for i in range(len(s) - 1): if s[i] == "0": zeros += 1 else: ones -= 1 ans = max(ans, ones + zeros) return ans s = "011001100111" print(solve(s))
อินพุต
"011001100111"
ผลลัพธ์
8