目錄
一、題目內容
二、解題思路
三、**
在乙個由小寫字母構成的字串 s 中,包含由一些連續的相同字元所構成的分組。例如,在字串 s = "abb***xzyy" 中,就含有 "a", "bb", "***x", "z" 和 "yy" 這樣的一些分組。
分組可以用區間 [start, end] 表示,其中 start 和 end 分別表示該分組的起始和終止位置的下標。上例中的 "***x" 分組用區間表示為 [3,6] 。
我們稱所有包含大於或等於三個連續字元的分組為 較大分組 。
找到每乙個 較大分組 的區間,按起始位置下標遞增順序排序後,返回結果。
示例 1:輸入:s = "abb***xzzy"
輸出:[[3,6]]
解釋:"***x" 是乙個起始於 3 且終止於 6 的較大分組。
示例 2:輸入:s = "abc"
輸出:解釋:"a","b" 和 "c" 均不是符合要求的較大分組。
示例 3:輸入:s = "abcdddeeeeaabbbcd"
輸出:[[3,5],[6,9],[12,14]]
解釋:較大分組為 "ddd", "eeee" 和 "bbb"
示例 4:利用字典儲存每個字母連續的區間,其中每個字母對應的value值的第乙個元素作為是否是當前字母的標誌,結果集裡儲存長度為3的區間即可。輸入:s = "aba"
輸出:
class solution:
def largegrouppositions(self, s: str) -> list:
s_dict = {}
for i in range(len(s)):
if i != 0:
if s[i] != s[i - 1]:
s_dict[s[i - 1]][0] = 0
if len(s_dict[s[i - 1]][-1]) != 2:
s_dict[s[i - 1]][-1].pop()
if s[i] not in s_dict:
s_dict[s[i]] = [1, [i]]
else:
if len(s_dict[s[i]][-1]) >= 2:
if s_dict[s[i]][0] != 0:
s_dict[s[i]][-1].pop(-1)
else:
else:
s_dict[s[i]][0] = 1
# print(s_dict)
res =
for k, v in s_dict.items():
for j in range(1, len(v)):
if len(v[j]) == 2:
if v[j][1] - v[j][0] >= 2:
sorted_res = sorted(res, key=lambda x: x[0])
return sorted_res
if __name__ == '__main__':
s = "abcdddeeeeaabbbcd"
ss = solution()
ans = ss.largegrouppositions(s)
print(ans)
leetcode 830 較大分組的位置
在乙個由小寫字母構成的字串 s 中,包含由一些連續的相同字元所構成的分組。例如,在字串 s abb xzyy 中,就含有 a bb x z 和 yy 這樣的一些分組。我們稱所有包含大於或等於三個連續字元的分組為較大分組。找到每乙個較大分組的起始和終止位置。最終結果按照字典順序輸出。示例 1 輸入 a...
LeetCode 830 較大分組的位置
在乙個由小寫字母構成的字串 s 中,包含由一些連續的相同字元所構成的分組。例如,在字串 s abb xzyy 中,就含有 a bb x z 和 yy 這樣的一些分組。我們稱所有包含大於或等於三個連續字元的分組為較大分組。找到每乙個較大分組的起始和終止位置。最終結果按照字典順序輸出。示例 1 輸入 a...
leetCode 830 較大分組的位置
使用乙個變數num記錄當前分組的長度num初始值為1,如果當前字元與之前的字元不同或者當前遍歷到了陣列尾部則判斷num的大小如果num 3,則加入答案,其他情況使num class solution num 1 else return res 利用雙指標記錄陣列每一段的長度,如果當前分組的長度大於等...