fork(1) download
  1. from itertools import izip, starmap, tee
  2.  
  3. def pairwise(iterable): # itertools recipe
  4. a, b = tee(iterable)
  5. next(b, None)
  6. return izip(a, b)
  7.  
  8. def longest_duplicate(data):
  9. n = len(data)
  10. sa = sorted(xrange(n), key=lambda i: buffer(data, i)) # suffix array
  11. def lcp_item(i, j): # find longest common prefix array item
  12. start = i
  13. while i < n and data[i] == data[i + j - start]:
  14. i += 1
  15. return i - start, start
  16. size, start = max(starmap(lcp_item, pairwise(sa)), key=lambda x: x[0])
  17. return data[start:start + size]
  18.  
  19. import sys
  20. print longest_duplicate(sys.stdin.read())
Success #stdin #stdout 0.08s 8792KB
stdin
AAAAAAAAAAAAAAAAAAAAAAA hello world AAAAAAAAAAAAAAAAAAAAAAA
hello world hello world
stdout
AAAAAAAAAAAAAAAAAAAAAAA