Description
https://leetcode.com/problems/positions-of-large-groups/
In a string s
of lowercase letters, these letters form consecutive groups of the same character.
For example, a string like s = "abbxxxxzyy"
has the groups "a"
, "bb"
, "xxxx"
, "z"
, and "yy"
.
A group is identified by an interval [start, end]
, where start
and end
denote the start and end indices (inclusive) of the group. In the above example, "xxxx"
has the interval [3,6]
.
A group is considered large if it has 3 or more characters.
Return the intervals of every large group sorted in increasing order by start index.
Example 1:
Input: s = "abbxxxxzzy"
Output: [[3,6]]
Explanation: "xxxx" is the only
large group with start index 3 and end index 6.
Example 2:
Input: s = "abc" Output: [] Explanation: We have groups "a", "b", and "c", none of which are large groups.
Example 3:
Input: s = "abcdddeeeeaabbbcd" Output: [[3,5],[6,9],[12,14]] Explanation: The large groups are "ddd", "eeee", and "bbb".
Example 4:
Input: s = "aba" Output: []
Constraints:
1 <= s.length <= 1000
s
contains lower-case English letters only.
Explanation
Iterate the list with two pointers. If the fast pointer is different than the slow pointer letter, move the slow to the fast position, and reset the counter.
Python Solution
class Solution:
def largeGroupPositions(self, s: str) -> List[List[int]]:
results = []
i = 0
j = 0
visited = set()
while j < len(s):
if len(visited) == 0:
visited.add(s[j])
j += 1
elif s[j] not in visited:
if j - i > 2:
results.append([i, j - 1])
visited = set()
i = j
else:
j += 1
if len(visited) > 0 and j - i > 2:
results.append([i, j - 1])
return results
- Time Complexity: O(Nlog(N)).
- Space Complexity: O(N).