LeetCode 249. Group Shifted Strings

本文探讨了一种基于字符串移位的算法,该算法能够将属于同一移位序列的字符串进行分组。通过实例演示了如何使用Python实现这一算法,包括详细的操作流程和代码示例。文章展示了如何通过计算每个字符串的移位键来识别其所属的移位序列,并最终按序列分组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

------------------------------------------------------------------

虽然过了,操作有点长:

from collections import defaultdict
class Solution:
    def groupStrings(self, strings: List[str]) -> List[List[str]]:
        def get_key(s):
            res = ''
            delta = ord(s[0])-ord('a')
            for ch in s:
                if (ord(ch)-delta >= ord('a')):
                    res += chr(ord(ch)-delta)
                else:
                    res += chr(ord(ch)-delta+26)
            return res
        
        res = []
        dic = defaultdict(list)
        for s in strings:
            key = get_key(s)
            dic[key].append(s)
        for k,v in dic.items():
            res.append(sorted(v))
        return res

从Discussion学的精简codes:

from collections import defaultdict
class Solution:
    def groupStrings(self, strings):
        groups = collections.defaultdict(list)
        for s in strings:
            groups[tuple((ord(c) - ord(s[0])) % 26 for c in s)] += s,
        return groups.values()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值