สมมติว่ามีสตริง S ของอักษรตัวพิมพ์เล็ก ตัวอักษรเหล่านี้จัดกลุ่มต่อเนื่องกันของอักขระเดียวกัน ดังนั้น เมื่อสตริงเช่น S เหมือนกับ "abbxxxxyy" จะมีกลุ่ม "a", "bb", "xxxx", "z" และ "yy" กลุ่มจะเป็นกลุ่มใหญ่เมื่อมีอักขระ 3 ตัวขึ้นไป เราต้องการตำแหน่งเริ่มต้นและสิ้นสุดของกลุ่มใหญ่ทุกกลุ่ม
ดังนั้น หากอินพุตเป็นเหมือน "abcdddeeeeaabbbcd" ผลลัพธ์จะเป็น [[3,5],[6,9],[12,14]]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ans :=รายการใหม่
- csum :=0
- สำหรับแต่ละ a, b ให้สร้างกลุ่มตัวอักษรที่มีตัวอักษรต่อเนื่องกัน do
- grp :=รายการที่จัดกลุ่ม
- ถ้าขนาดของ grp>
=3 แล้ว
- แทรกรายการด้วย (csum,csum + ขนาด grp - 1) ลงใน ans
- csum :=csum + ขนาดของ grp
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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]]