Mình vừa nghĩ ra, việc gộp 3 đoạn đầu tiên dạng XYX(với X một hoặc nhiều chữ A liên tục, Y là một hoặc nhiều chữ B liên tục, hoặc ngược lại) trở thành XXX sẽ tốn chi phí tối thiểu là 1 (nếu Y chỉ gồm 1 kí tự thì biến đổi kí tự đó luôn) và tối đa chỉ cần 2 bước (XYX bước đầu đổi đoạn đầu tiên thành Y sẽ được YYX, sau đó đổi nguyên đoạn đầu thành X được XXX)
như vậy chỉ cần lần lượt được 3 đoạn đầu tiên lại với nhau (2 nếu chỉ còn 2 đoạn) với chi phí tối ưu cho mỗi lần gộp
với mỗi bước gộp sẽ bớt đi 2 đoạn, và cứ thể gộp tiếp cho đến khi hết (lần gộp cuối nếu chỉ còn 2 đoạn thì hiển nhiên chi phí là 1)
Và sau khi gộp tất cả thành 1, nếu chuỗi gộp lúc này là BBBB… (toàn là B) thì cộng thêm 1 bước để đổi tất cả thành A
cách này chỉ cần 1 vòng lặp là xong, khỏi đệ quy
Update tí nữa
cách này bị sai với case này ABBBBABBB
như vậy cần xem xét trường hợp XYXY, việc biến đổi XYX thành XXX hoặc YYY đều tốn chi phí là 2, lúc này cần cách biến đổi thành YYY, vì sau đó dược YYYY, sẽ tối ưu hơn so với XXXY tốn thêm bước nữa để trở thành XXXX và có khi lại tốn thêm bước nữa để trở thành YYYY
Một lời khuyên nữa, khi bạn còn chưa vạch ra được giải pháp rõ ràng thì chẳng thể nào code được pass đâu (trừ khi testcase không phủ hết tất cả các case)