Hola, a ver qué te parece esta función.
Código:
from string import punctuation
def f(text, sep=" "):
text = text.lower()
splitted_text = text.split(sep)
ret = {}
for c in text:
if c in punctuation or c in ret:
continue
try:
ret[c] = max(
(token for token in splitted_text if c in token),
key=len)
except ValueError:
pass
return ret
text = """\
Aristóteles fue un polímata: filósofo, lógico y científico de la Antigua \
Grecia cuyas ideas han ejercido una enorme influencia sobre la historia \
intelectual de Occidente por más de dos milenios."""
print(f(text))
El resultado es un diccionario:
Código:
{'g': 'antigua', 'e': 'aristóteles', 'ó': 'aristóteles', 'j': 'ejercido', 't': '
aristóteles', 'c': 'intelectual', 'a': 'aristóteles', 's': 'aristóteles', 'm': '
polímata:', 'd': 'occidente', 'n': 'intelectual', 'b': 'sobre', 'h': 'historia',
'o': 'científico', 'u': 'intelectual', 'r': 'aristóteles', 'í': 'científico', '
á': 'más', 'y': 'cuyas', 'l': 'aristóteles', 'p': 'polímata:', 'i': 'aristóteles
', 'f': 'científico'}
En el caso de que con "cadena más larga" te refieras a palabra más larga. Si te refieres a oración más larga, puedes usar:
Código:
print(f(text, "."))
(Aunque en este caso el texto contiene solo una oración).
Un saludo.