สมมติว่าเรามีสตริงไบนารี 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