代码改变世界

[LeetCode] 830. Positions of Large Groups_Easy tag: Two Pointers

2018-08-20 03:56  Johnson_强生仔仔  阅读(183)  评论(0编辑  收藏  举报

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".

Call a group large if it has 3 or more characters.  We would like the starting and ending positions of every large group.

The final answer should be in lexicographic order.

 

Example 1:

Input: "abbxxxxzzy"
Output: [[3,6]]
Explanation: "xxxx" is the single large group with starting  3 and ending positions 6.

Example 2:

Input: "abc"
Output: []
Explanation: We have "a","b" and "c" but no large group.

Example 3:

Input: "abcdddeeeeaabbbcd"
Output: [[3,5],[6,9],[12,14]]

 

Note:  1 <= S.length <= 1000

 

思路用两个pointers

Code

class Solution:
    def largeGroupPositions(self, s):
        l, r, lr, ans = 0, 0, len(s),[]
        while r < lr:
            if s[r] != s[l]:
                if (r - l) >= 3:
                    ans.append([l, r-1])
                l = r
            elif r == lr -1 and r - l + 1 >= 3:
                ans.append([l,r])
            r += 1
        return ans