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]]