ให้ Binary String s แบ่งเป็น s1 และ s2 (ทั้งคู่ไม่ว่าง) คะแนน = จำนวน '0' ใน s1 + จำนวน '1' ใน s2 หาคะแนนสูงสุด
ตัวอย่าง: s = "011001100111" → 8 (แบ่ง "01100" + "110111" → 3+5=8)
ขั้นตอน (One Pass O(n))
- นับ
onesทั้งหมดในs zeros = 0, ans = 0- วนลูป
iจาก 0 ถึงlen(s)-2:- ถ้า
s[i]=='0':zeros += 1 - มิฉะนั้น:
ones -= 1 ans = max(ans, ones + zeros)
- ถ้า
ตัวอย่างโค้ด
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)) # Output: 8อินพุต
"011001100111"
เอาต์พุต
8