สมมติว่ามีสตริง 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]]