Проблема соответствия строк часто лучше всего решается с помощью Регулярного выражения .
Также рекомендуется разделять ваши алгоритмы ( например оценка, вычисление, сопоставление , создавая структуры данных и т. д. c.) из ваших побочных эффектов ( например печать), поскольку это позволяет проводить модульное тестирование.
Приведенный ниже код должен решить вашу проблему:
import re
regex = re.compile(r'^.*(AB.*BA|BA.*AB).*$')
def isABBA(s):
return regex.match(s) is not None
assert isABBA('ABBA')
assert isABBA('BAAB')
assert not isABBA('ABA')
assert not isABBA('ABHA')
for i in ['ABBA','BAAB','ABA','ABHA']:
print('YES' if isABBA(i) else 'NO')
# Output:
# YES
# YES
# NO
# NO