Giả sử chúng ta có một chuỗi s chỉ bao gồm hai chữ cái A và B, chúng ta phải tìm số lượng chữ cái tối thiểu cần phải xóa khỏi s để nhận được tất cả các lần xuất hiện của As trước tất cả các lần xuất hiện của B.
Vì vậy, nếu đầu vào là S ="AABAABB", thì đầu ra sẽ là 1, vì Chúng ta có thể loại bỏ chữ A cuối cùng để lấy AABBB
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:
-
a_right:=số lần xuất hiện của "A" trong s
-
b_left:=0
-
ans:=a_right
-
đối với mỗi chỉ mục i và ký tự c trong s, thực hiện
-
nếu c giống với "A" thì
-
a_right:=a_right - 1
-
-
nếu không,
-
b_left:=b_left + 1
-
-
ans:=tối thiểu ans và a_right + b_left
-
-
trả lại ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:
Ví dụ
class Solution: def solve(self, s): a_right = s.count("A") b_left = 0 ans = a_right for i, c in enumerate(s): if c == "A": a_right -= 1 else: b_left += 1 ans = min(ans, a_right + b_left) return ans ob = Solution() S = "AABAABB" print(ob.solve(S))
Đầu vào
"AABAABB"
Đầu ra
1