Нахождение «BA» и «AB» в одной строке без наложения - PullRequest
0 голосов
/ 18 марта 2020

Я ищу свой ответ в stackoverflow и на других сайтах, но не могу найти свой ответ. Я не хочу использовать библиотеки, я хочу более простой ответ .

он должен сделать это: получить 'ABBA' и напечатать ('YES') / получить «BAAB» и распечатать («ДА») / получить «ABA» и распечатать («НЕТ») / получить «ABHA» и распечатать («НЕТ»)

Я пишу этот код:

str = input().upper()
a = str.find('AB')
b = str.find('BA')


if ('AB' in str ) == True:
    a = a+2 and 'BA' in str[a:] == True
    print('YES')

if ('BA' in str ) == True:
    b = b+2 and 'AB' in str[b:] == True
    print('YES')

if ('AB' in str[b:]) == False:
    print('NO')
elif ('BA' in str[a:]) == False:
    print('NO')

мой код печатает много ДА !!

1 Ответ

2 голосов
/ 19 марта 2020

Проблема соответствия строк часто лучше всего решается с помощью Регулярного выражения .

Также рекомендуется разделять ваши алгоритмы ( например оценка, вычисление, сопоставление , создавая структуры данных и т. д. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...