Cho một chuỗi nhị phân s. Một phép toán cho phép chọn một bit và đảo giá trị của nó (0 thành 1 hoặc 1 thành 0). Tìm số phép toán tối thiểu để chuỗi không còn chứa ba bit giống nhau liên tiếp.
Ví dụ: s = "10011100" → kết quả 1 (đảo bit tại chỉ số 4 từ 1 thành 0, chuỗi thành "10010100").
Thuật toán
- Khởi tạo
l = 0,count = 0. - Trong khi
l < len(s):- Đặt
r = l. - Mở rộng
rkhir < len(s)vàs[r] == s[l](tìm đoạn liên tiếp cùng ký tự). - Cộng vào
countgiá trị(r - l) // 3(mỗi 3 bit liên tiếp cần 1 phép đảo). - Cập nhật
l = r.
- Đặt
- Trả về
count.
Mã Python
def solve(s):
l = 0
count = 0
while l < len(s):
r = l
while r < len(s) and s[r] == s[l]:
r += 1
count += (r - l) // 3
l = r
return count
s = "10011100"
print(solve(s)) # 1
Đầu vào / Đầu ra
Input: "10011100"
Output: 1