1. 程式人生 > 其它 >力扣 leetcode 830. 較大分組的位置

力扣 leetcode 830. 較大分組的位置

技術標籤:pythonleetcodeleetcode資料結構演算法python字串

Topic:

在一個由小寫字母構成的字串 s 中,包含由一些連續的相同字元所構成的分組。
例如,在字串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 這樣的一些分組。
分組可以用區間 [start, end] 表示,其中 start 和 end 分別表示該分組的起始和終止位置的下標。上例中的 “xxxx” 分組用區間表示為 [3,6] 。
我們稱所有包含大於或等於三個連續字元的分組為 較大分組 。
找到每一個 較大分組 的區間,按起始位置下標遞增順序排序後,返回結果。

Example_1:

輸入:s = “abbxxxxzzy”
輸出:[[3,6]]
解釋:“xxxx” 是一個起始於 3 且終止於 6 的較大分組。

Example_2:

輸入:s = “abc”
輸出:[]
解釋:“a”,“b” 和 “c” 均不是符合要求的較大分組。

Example_3:

輸入:s = “abcdddeeeeaabbbcd”
輸出:[[3,5],[6,9],[12,14]]
解釋:較大分組為 “ddd”, “eeee” 和 “bbb”

Example_4:

輸入:s = “aba”
輸出:[]

Solution:

對列表s進行遍歷
對每次的重複陣列重複數字的出現記錄為count(重複陣列也可為僅出現一次)

同時對於每一次出現的重複陣列來說
遍歷的值與下一位不相等
或者整個數列全部遍歷完成均可作為重複陣列遍歷完成的結束條件
此時可以判斷此陣列的出現次數是否大於三
若大於三,則將開始位置和結束位置作為新列表加入結果res中
(注意判斷遍歷完成時需要將全部遍歷完的條件優先判斷)
(用於避免陣列遍歷時出界)
最後返回res完成

Code:

class Solution:
    def largeGroupPositions(self, s: str) -> List[List[int]]:
        res = []
        n = len(s)
        count = 1
for i in range(n): if i == n - 1 or s[i] != s[i + 1] : if count >= 3: res.append([i - count + 1, i]) count = 1 else: count += 1 return res

Answer:
在這裡插入圖片描述