在乙個由小寫字母構成的字串 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:
輸入:s =
"aba"
輸出:[
]
(1)直接遍歷對於這道題目,可以直接一趟進行遍歷。初始化乙個num,用來儲存當前分組的長度。每次增加乙個相同字元,num就加一。如果下乙個字元和當前字元不同,或者是已經遍歷到字串尾部,就說明相同的字元已經遍歷完了。如果此時num滿足較大分組的條件,就其加入到結果中。
複雜度分析:
(2)雙指標
除了直接遍歷之外,我們還可以使用雙指標來實現這個題目。
複雜度分析:
(1)直接遍歷
/**
* @param s
* @return
*/var
largegrouppositions
=function
(s) num =1}
else
}return res
};
(2)雙指標
/**
* @param s
* @return
*/var
largegrouppositions
=function
(s) left = right
}right +=1}
return res
};
(1)直接遍歷![](https://pic.w3help.cc/ed1/7d11e24a9f3302986a87144b40478.jpeg)
(2)雙指標
較大分組的位置
在乙個由小寫字母構成的字串s中,包含由一些連續的相同字元所構成的分組。例如,在字串s abb xzyy 中,就含有 a bb x z 和 yy 這樣的一些分組。我們稱所有包含大於或等於三個連續字元的分組為較大分組。找到每乙個較大分組的起始和終止位置。最終結果按照字典順序輸出。示例 1 輸入 abb ...
較大分組的位置
題目 在乙個由小寫字母構成的字串 s 中,包含由一些連續的相同字元所構成的分組。例如,在字串 s abb xzyy 中,就含有 a bb x z 和 yy 這樣的一些分組。我們稱所有包含大於或等於三個連續字元的分組為較大分組。找到每乙個較大分組的起始和終止位置。最終結果按照字典順序輸出。示例 示例 ...
較大分組的位置
在乙個由小寫字母構成的字串 s 中,包含由一些連續的相同字元所構成的分組。例如,在字串 s abb xzyy 中,就含有 a bb x z 和 yy 這樣的一些分組。分組可以用區間 start,end 表示,其中 start 和 end 分別表示該分組的起始和終止位置的下標。上例中的 x 分組用區間...