ได้สตริง S ตัวอักษรพิมพ์เล็ก ตัวอักษรที่ติดกันและเหมือนกันจะเป็น "กลุ่ม" กลุ่มที่มีขนาด ≥ 3 เรียกว่า "กลุ่มใหญ่" ต้องการตำแหน่งเริ่มต้นและสิ้นสุดของทุกกลุ่มใหญ่
ตัวอย่าง
S = "abcdddeeeeaabbbcd" → กลุ่มใหญ่คือ ddd (3-5), eeee (6-9), bbb (12-14) → ผลลัพธ์ [[3,5],[6,9],[12,14]]
ขั้นตอนการแก้ปัญหา
- ใช้
itertools.groupbyจัดกลุ่มตัวอักษรติดกัน - เก็บดัชนีสะสม
csum - แต่ละกลุ่ม: ถ้าความยาว ≥ 3 → บันทึก
[csum, csum + len - 1] - อัปเดต
csum += len(กลุ่ม) - คืนรายการตำแหน่ง
การติดตั้งใน 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]]