def maxx(subs):
al = {}
for sub in subs:
for s in sub:
if not al.has_key(s): al[s] = 1
else: al[s] += 1
maxx = max(al.values())
return filter(lambda item: item[1] == maxx, al.iteritems())
def substrs(words):
al = []
if words:
for word in words:
subs, ii = [], 0
for i, char in enumerate(word):
try:
if not subs:
subs.append(char)
if i != 0:
ii += 1
elif (char == word[i - 1]) and (char == word[i + 1]):
subs[ii] += char
else:
subs.append(char)
ii += 1
except IndexError:
subs[ii] += char
al.append(subs)
return maxx(al)
if __name__ == '__main__':
print substrs(("abcbb",
"abcabb",
"bb"))
ZGVmIG1heHgoc3Vicyk6CiAgICBhbCA9IHt9CiAgICBmb3Igc3ViIGluIHN1YnM6CiAgICAgICAgZm9yIHMgaW4gc3ViOgogICAgICAgICAgICBpZiBub3QgYWwuaGFzX2tleShzKTogYWxbc10gPSAxCiAgICAgICAgICAgIGVsc2U6IGFsW3NdICs9IDEKICAgIG1heHggPSBtYXgoYWwudmFsdWVzKCkpCiAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBpdGVtOiBpdGVtWzFdID09IG1heHgsIGFsLml0ZXJpdGVtcygpKQoKCmRlZiBzdWJzdHJzKHdvcmRzKToKICAgIGFsID0gW10KICAgIGlmIHdvcmRzOgogICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgogICAgICAgICAgICBzdWJzLCBpaSA9IFtdLCAwCiAgICAgICAgICAgIGZvciBpLCBjaGFyIGluIGVudW1lcmF0ZSh3b3JkKToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3ViczoKICAgICAgICAgICAgICAgICAgICAgICAgc3Vicy5hcHBlbmQoY2hhcikKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSAhPSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgKz0gMQogICAgICAgICAgICAgICAgICAgIGVsaWYgKGNoYXIgPT0gd29yZFtpIC0gMV0pIGFuZCAoY2hhciA9PSB3b3JkW2kgKyAxXSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNbaWldICs9IGNoYXIKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBzdWJzLmFwcGVuZChjaGFyKQogICAgICAgICAgICAgICAgICAgICAgICBpaSArPSAxCiAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgICAgICAgICBzdWJzW2lpXSArPSBjaGFyCiAgICAgICAgICAgIGFsLmFwcGVuZChzdWJzKQogICAgICAgIHJldHVybiBtYXh4KGFsKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50IHN1YnN0cnMoKCJhYmNiYiIsCiAgICAgICAgICAgICAgICAgICAiYWJjYWJiIiwKICAgICAgICAgICAgICAgICAgICJiYiIpKQ==