Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Positions of Large Groups ใน Python: หาตำแหน่งกลุ่มตัวอักษรซ้ำ 3 ตัวขึ้นไป

ได้สตริง S ตัวอักษรพิมพ์เล็ก ตัวอักษรที่ติดกันและเหมือนกันจะเป็น "กลุ่ม" กลุ่มที่มีขนาด ≥ 3 เรียกว่า "กลุ่มใหญ่" ต้องการตำแหน่งเริ่มต้นและสิ้นสุดของทุกกลุ่มใหญ่

ตัวอย่าง

S = "abcdddeeeeaabbbcd" → กลุ่มใหญ่คือ ddd (3-5), eeee (6-9), bbb (12-14) → ผลลัพธ์ [[3,5],[6,9],[12,14]]

ขั้นตอนการแก้ปัญหา

  1. ใช้ itertools.groupby จัดกลุ่มตัวอักษรติดกัน
  2. เก็บดัชนีสะสม csum
  3. แต่ละกลุ่ม: ถ้าความยาว ≥ 3 → บันทึก [csum, csum + len - 1]
  4. อัปเดต csum += len(กลุ่ม)
  5. คืนรายการตำแหน่ง

การติดตั้งใน Python

from itertools import groupby

class Solution:
    def largeGroupPositions(self, S):
        ans = []
        csum = 0
        for _, group in groupby(S):
            grp = list(group)
            if len(grp) >= 3:
                ans.append([csum, csum + len(grp) - 1])
            csum += len(grp)
        return ans

ob = Solution()
print(ob.largeGroupPositions("abcdddeeeeaabbbcd"))
# [[3, 5], [6, 9], [12, 14]]

อินพุต / เอาต์พุต

Input: "abcdddeeeeaabbbcd"
Output: [[3, 5], [6, 9], [12, 14]]