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 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.