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)]

results matching ""

    No results matching ""