LeetCode830:较大分组的位置

目录

一、题目

二、示例

三、思路

四、代码


一、题目

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

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

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

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

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

二、示例

示例 1:

输入:s = "abbxxxxzzy"
输出:[[3,6]]
解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。

示例 2:

输入:s = "abc"
输出:[]
解释:"a","b" 和 "c" 均不是符合要求的较大分组。

示例 3:

输入:s = "abcdddeeeeaabbbcd"
输出:[[3,5],[6,9],[12,14]]
解释:较大分组为 "ddd", "eeee" 和 "bbb"

示例 4:

输入:s = "aba"
输出:[]

提示:

  • 1 <= s.length <= 1000
  • s 仅含小写英文字母

三、思路

start, end 分表表示分组的起始位置和终止位置下标。

每次遍历判断当前字符后面的字符是否相等若相等,continue;否则,更新start, end的值

在这里,需要注意,方法一需要判断连续字符在最后的情况方法二则不需要,因为一开始在字符串 s 最后添加了字符 -1,因此避免了连续字符在最后的情况了

四、代码

1、

class Solution:
    def largeGroupPositions(self, s: str):
        """
        :param s: str
        :return: List[List[int]]
        """
        ans = []
        start, end = 0, 0
        if not s:
            return []
        for i in range(len(s) - 1):
            if s[i + 1] != s[i]:
                if end - start >= 2:
                    ans.append([start, end])
                start, end = i + 1, i + 1
            else:
                end += 1
        if end - start >= 2:
            ans.append([start, end])
        return ans

if __name__ == '__main__':
    # test = "abcdddeeeeaabbbcd"
    test = 'aaa'
    # ans = [[3, 5], [6, 9], [12, 14]]
    s = Solution()
    ans = s.largeGroupPositions(test)
    print(ans)

2、

class Solution:
    def largeGroupPositions(self, s: str):
        ans = []
        start, end = 0, 0
        if not s:
            return []

        s = s + str(-1)
        for i in range(len(s) - 1):
            if s[i + 1] != s[i]:
                if end - start >= 2:
                    ans.append([start, end])
                start, end = i + 1, i + 1
            else:
                end += 1
        return ans

if __name__ == '__main__':
    # test = "abcdddeeeeaabbbcd"
    test = 'aaa'
    # ans = [[3, 5], [6, 9], [12, 14]]
    s = Solution()
    ans = s.largeGroupPositions(test)
    print(ans)

猜你喜欢

转载自blog.csdn.net/weixin_45666660/article/details/112213105