Giả sử chúng ta có một chuỗi nhị phân s, bây giờ chúng ta hãy xem xét một phép toán trong đó chúng ta chọn một bit và lật giá trị của nó từ 0 sang 1 hoặc ngược lại. Chúng ta phải tìm số phép toán tối thiểu cần thiết để có được một chuỗi không có ba bit liên tiếp giống nhau.
Vì vậy, nếu đầu vào là s ="10011100", thì đầu ra sẽ là 1, vì chúng ta có thể lật 1 thành 0 bit ở chỉ số 4 để làm cho chuỗi "10010100" không có ba bit giống nhau liên tiếp.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- l:=0, count:=0
- while l
- r:=l
- while r
- r:=r + 1
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
"10011100"
Đầu ra
1