LeetCode每日一题(1.5)
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。分组区间用 [start, end] 表示,其中 start 和 end 分别表示该分组的 起始和终止 位置的下标。
例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。 “xxxx” 分组用区间表示为 [3,6]。
称所有包含大于或等于三个连续字符的分组为较大分组 。找到每一个 较大分组 的区间,按起始位置下标递增排序后,返回结果。
示例:
input:s = “abbxxxxzzy”
output:[[3,6]]
链接:https://leetcode-cn.com/problems/positions-of-large-groups
s 是全小写字母,再末尾加一个 0,就不用考虑末尾三连的情况啦。找到相同数目的字母,然后如果起末差值 <2 则更新start & end 位置,直到有 >=2 才输出
class Solution:
def largeGroupPositions(self, s: str) -> List[List[int]]:
s=s+"0"
group=[]
start,end,target=0,0,s[0]
if len(s) < 1:
return group
for i in range(1,len(s)):
if s[i]==target:
end += 1
else:
if end-start >= 2:
group.append([start,end])
start,end=i,i
target=s[i]
return group