Как найти перекрытие между первой n строкой, которая соответствует последней n строке в других python 3? - PullRequest
0 голосов
/ 13 марта 2020

Предположим, у меня есть две строки:

a = 'stackoverflow'
b =  'mathisgoodstackover'

Я пытаюсь найти наибольшую часть перекрытия с начала a, которая соответствует окончанию b.

c= 'stackover'
d = 'stackoverf'

c является оптимальным решением. d - нет, поскольку b не заканчивается на stackoverf.

Я пытаюсь использовать грубую силу, но не знаю, как написать l oop. любой эффективный алгоритм?

Спасибо,

1 Ответ

3 голосов
/ 13 марта 2020

вы можете использовать встроенную функцию max с пониманием списка:

max([a[:i] for i in range(1,len(a) + 1) if b.endswith(a[:i])], key=len)

вывод:

'stackover'

также для особых случаев:

a = 'ssss'
b =  'mathisgoodssssss'
max([a[:i] for i in range(1,len(a) + 1) if a[:i] == b[-i:]], key=len)

outut:

'ssss'

или, как предлагает @ShadowRanger, вы можете начать с максимально большого i, а затем уменьшить, используя встроенную функцию next с выражение генератора

next((a[:i] for i in range(len(a), 0,-1) if b.endswith(a[:i])), '')
...