I do believe the algorithm in the pervious answer and in the OP does not do what the OP wanted. It test for the longest string starting with the line's first character, and then repeat from the first non repeating string. For example if the string is
abcaefgb
The algorithm given will return
abc
while the right answer should be
bcaefg
I believe the following algorithm will find the right string. Note that if there are several equal length longest strings it will return the first
def scantillrepeat(line):
found = ''
for char in line:
if not char in found:
found = found + char
else:
break
return( found)
def findlongest(f):
for line in f:
longestfound = ''
longestfoundlen = 0
for k in range(len(line)):
candidate = scantillrepeat(line[k:])
if len(candidate) > longestfoundlen:
longestfound = candidate
longestfoundlen = len(candidate)
return( longestfound)
To test
In [39]: f = ['abcaefgb']
In [40]: findlongest(f)
Out[40]: 'bcaefg'
Note that my version does not allow joining lines separated by newline \n. This should be altered if needed.