Giả sử chúng ta có một chuỗi số s. Chúng ta phải kiểm tra xem có sự sắp xếp nào cho phép chúng ta có một cặp ký tự giống nhau và phần còn lại của chuỗi tạo thành bất kỳ số lượng bộ ba ký tự giống nhau nào hay không.
Vì vậy, nếu đầu vào là s = "21133123", thì đầu ra sẽ là True, vì có hai chữ số 2 tạo thành "22" làm cặp và "111", "333" làm hai bộ ba.
Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau:
d := một danh sách chứa tần suất của mỗi phần tử hiện có trong s
với mỗi k trong d, thực hiện
d[k] := d[k] - 2
nếu d[i] mod 3 bằng 0 cho mọi i trong d, thì
trả về True
d[k] := d[k] + 2
trả về False
Ví dụ
Hãy xem triển khai sau để hiểu rõ hơn:
from collections import Counter
def solve(s):
d = Counter(s)
for k in d:
d[k] -= 2
if all(d[i] % 3 == 0 for i in d):
return True
d[k] += 2
return False
s = "21133123"
print(solve(s))
Đầu vào
"21133123"
Đầu ra
True