LeetCode-830.较大分组的位置

在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。

例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。

分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 “xxxx” 分组用区间表示为 [3,6] 。

我们称所有包含大于或等于三个连续字符的分组为 较大分组 。

找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。

https://leetcode.cn/problems/positions-of-large-groups/description/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def largeGroupPositions(s):
n, num, ret = len(s), 1, []
for i in range(n):
# 当遍历到最后一个元素,或者当前元素与下个元素不相同时,进行一次是否连续判定(相当于开始结算)
if i == n - 1 or s[i] != s[i + 1]:
# 当计数值大于等于3时,将其加入结果集,并将计数值num初始化成1
# 当计数值小于3,直接初始化num,重新计数。因为此时遍历到末尾元素或下一个元素与当前元素不同
if num >= 3:
ret.append([i - num + 1, i])
num = 1
# 当没有遍历到最后一位或者存在连续字符时,计数值num+1
else:
num += 1

return ret

s = "abcdddeeeeaabbbcd"
print(largeGroupPositions(s))

LeetCode-830.较大分组的位置
https://zhouyinglin.cn/post/69ba27e9.html
作者
小周
发布于
2022年12月22日
更新于
2022年12月22日
许可协议