Python 中大块的位置


假设有一个小写字母字符串 S,这些字母形成连续的相同字符组。因此,当一个字符串像 S 一样像“abbxxxxzyy”时,则有组“a”、“bb”、“xxxx”、“z”和“yy”。当组中有 3 个或更多字符时,该组将是大组。我们想要每个大组的起始位置和结束位置。

因此,如果输入像“abcdddeeeeaabbbcd”一样,则输出将是 [[3,5],[6,9],[12,14]]

为了解决这个问题,我们将遵循以下步骤 -

  • ans := 新列表
  • csum := 0
  • 对于每个带有连续字母的字母的 a、b 对,执行
    • grp := 分组的项目列表
    • 如果 grp 的大小 >= 3,则
      • 将包含 (csum,csum + grp 的大小 - 1) 的列表插入到 ans 中
    • csum := csum + grp 的大小
  • 返回 ans

让我们看看以下实现以加深理解 -

示例

 现场演示

from itertools import groupby
class Solution:
   def largeGroupPositions(self, S):
      ans = []
      csum = 0
      for a, b in groupby(S):
         grp = list(b)
      if len(grp) >= 3:
         ans.append([csum, csum+len(grp)-1])
         csum+=len(grp)
   return ans
ob = Solution()
print(ob.largeGroupPositions("abcdddeeeeaabbbcd"))

输入

"abcdddeeeeaabbbcd"

输出

[[3, 5], [6, 9], [12, 14]]

更新于:2020 年 7 月 4 日

159 次浏览

开启你的 职业生涯

完成课程获得认证

开始
广告