вы можете использовать встроенную функцию 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])), '')