題目詳情:
在(zai)一個由小寫字母(mu)構成(cheng)的(de)字符串 s 中,包含由一些連續的(de)相同字符所構成(cheng)的(de)分(fen)組。
例如,在字符(fu)串 s = "abbxxxxzyy" 中,就(jiu)含有(you) "a", "bb", "xxxx", "z" 和 "yy" 這樣的一些分組。
分組可以用區(qu)間 [start, end] 表(biao)示(shi)(shi),其中 start 和 end 分別表(biao)示(shi)(shi)該分組的起始(shi)和終止位置的下標。上例中的 "xxxx" 分組用區(qu)間表(biao)示(shi)(shi)為 [3,6] 。
我們稱所有包含大于或等于三個連續字(zi)符(fu)的分組(zu)為 較(jiao)大分組(zu) 。
找到(dao)每(mei)一(yi)個 較大分組 的區間,按起始位置下標遞增順序(xu)排序(xu)后,返回(hui)結(jie)果。
示例:
輸入:s = "abbxxxxzzy"
輸出:[[3,6]]
解釋:"xxxx" 是一個(ge)起始(shi)于(yu) 3 且(qie)終止于(yu) 6 的較大分組。
解題思路:
首(shou)先,我們定(ding)義(yi)一(yi)個空數組 result 來(lai)存(cun)儲結(jie)果。然后,定(ding)義(yi)一(yi)個變量(liang) start 來(lai)記錄當前分組的起(qi)始位置(zhi)。
使用一個循(xun)環遍(bian)歷(li)字(zi)(zi)符(fu)串 s,從第二個字(zi)(zi)符(fu)開(kai)(kai)始(shi)(索(suo)引為1)。如果當(dang)(dang)前(qian)(qian)(qian)字(zi)(zi)符(fu)與前(qian)(qian)(qian)一個字(zi)(zi)符(fu)不相同(tong),或者已(yi)經遍(bian)歷(li)到(dao)了(le)字(zi)(zi)符(fu)串的(de)末尾(wei),則(ze)表(biao)示當(dang)(dang)前(qian)(qian)(qian)分(fen)(fen)組(zu)(zu)結束。我們(men)檢(jian)查當(dang)(dang)前(qian)(qian)(qian)分(fen)(fen)組(zu)(zu)的(de)長度(du)是否大(da)于等于3,如果是,則(ze)將(jiang)起(qi)始(shi)位(wei)置和結束位(wei)置的(de)下標(biao)構成的(de)區(qu)間 [start, i-1] 添(tian)加到(dao)結果數組(zu)(zu) result 中。然后,更新(xin) start 的(de)值為當(dang)(dang)前(qian)(qian)(qian)字(zi)(zi)符(fu)的(de)下標(biao),開(kai)(kai)始(shi)記錄新(xin)的(de)分(fen)(fen)組(zu)(zu)的(de)起(qi)始(shi)位(wei)置。
最后(hou),返回結果數組 result。
代碼實現: