Skip to content

249. Group Shifted Strings

难度: 中等

刷题内容

原题连接

  • https://leetcode.com/problems/group-shifted-strings

内容描述

Given a string, we can "shift" each of its letter to its successive letter, for example: "abc" -> "bcd". We can keep "shifting" which forms the sequence:

"abc" -> "bcd" -> ... -> "xyz"
Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence.

Example:

Input: ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"],
Output: 
[
  ["abc","bcd","xyz"],
  ["az","ba"],
  ["acef"],
  ["a","z"]
]

解题方案

思路 1

hash table存储pattern

class Solution(object):
    def groupStrings(self, strings):
        """
        :type strings: List[str]
        :rtype: List[List[str]]
        """
        table = {}
        for w in strings:
            pattern = ''
            for i in range(1, len(w)):
                if ord(w[i]) - ord(w[i - 1]) >= 0:
                    pattern += str(ord(w[i]) - ord(w[i - 1]))
                else:
                    pattern += str(ord(w[i]) - ord(w[i - 1]) + 26)  ## 这是为了处理'az'和'ba'的情况

            if pattern in table:
                table[pattern].append(w)
            else:
                table[pattern] = [w]
        return [table[pattern] for pattern in table]


回到顶部