Group Shifted Strings
一开始还怀疑这种相邻两字母求差然后利用tuple当key的思路会超时,结果表明就是这么做的...
class Solution(object):
def groupStrings(self, strings):
"""
:type strings: List[str]
:rtype: List[List[str]]
"""
store = {}
for string in strings:
tmp = ()
for i in xrange(len(string)):
if i:
shiftValue = ord(string[i]) - ord(string[i - 1])
if shiftValue < 0:
shiftValue += 26
tmp += (shiftValue, )
if not tmp:
store.setdefault(1, [])
store[1].append(string)
else:
store.setdefault(tmp, [])
store[tmp].append(string)
return store.values()
毛子大神给的超短版本其实很好理解,有空可以研究一下itertools的功能
def groupStrings(self, strings):
key = lambda s: [(ord(c) - ord(s[0])) % 26 for c in s]
return [list(g) for _, g in itertools.groupby(sorted(strings, key=key), key)]