力扣 leetcode 830. 較大分組的位置
阿新 • • 發佈:2021-01-10
技術標籤: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: