假设存在一个由小写字母组成的字符串S,这些字母形成相同字符的连续组。因此,当像S这样的字符串像“ abbxxxxzyy”具有组“ a”,“ bb”,“ xxxx”,“ z”和“ yy”时。当一个小组有3个或更多字符时,将是一个大小组。我们希望每个大团体的起点和终点。
因此,如果输入类似于“ abcdddeeeeaabbbcd”,则输出将为[[3,5],[6,9],[12,14]]
为了解决这个问题,我们将遵循以下步骤-
ans:=一个新列表
csum:= 0
对于连续字母中的字母组中的每个a,b,
将(csum,csum + grp的大小-1)插入列表
grp:=分组项目列表
如果grp的大小> = 3,则
csum:= csum + grp大小
返回ans
让我们看下面的实现以更好地理解-
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]]