Giả sử có một chuỗi S gồm các chữ cái viết thường, các chữ cái này tạo thành các nhóm liên tiếp có cùng một ký tự. Vì vậy, khi một chuỗi như S giống như "abbxxxxzyy" có các nhóm "a", "bb", "xxxx", "z" và "yy". Một nhóm sẽ là một nhóm lớn khi có từ 3 ký tự trở lên. Chúng tôi muốn các vị trí bắt đầu và kết thúc của mọi nhóm lớn.
Vì vậy, nếu đầu vào là "abcdddeeeeaabbbcd", thì đầu ra sẽ là [[3,5], [6,9], [12,14]]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- ans:=một danh sách mới
- csum:=0
- đối với mỗi a, b trong nhóm các chữ cái có các chữ cái liên tiếp, hãy thực hiện
- grp:=danh sách mục được nhóm
- nếu kích thước của grp>
=3, thì
- chèn một danh sách có (csum, csum + kích thước của grp - 1) vào ans
- csum:=csum + kích thước của grp
- trả lại ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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"))
Đầu vào
"abcdddeeeeaabbbcd"
Đầu ra
[[3, 5], [6, 9], [12, 14]]