在一個由小寫字母構成的字符串 S
中,包含由一些連續的相同字符所構成的分組。
例如,在字符串 S = "abbxxxxzyy"
中,就含有 "a"
, "bb"
, "xxxx"
, "z"
和 "yy"
這樣的一些分組。
我們稱所有包含大於或等於三個連續字符的分組爲較大分組。找到每一個較大分組的起始和終止位置。
最終結果按照字典順序輸出。
示例 1:
輸入: "abbxxxxzzy" 輸出: [[3,6]] 解釋:
"xxxx" 是一個起始於 3 且終止於 6 的較大分組
。
示例 2:
輸入: "abc"
輸出: []
解釋: "a","b" 和 "c" 均不是符合要求的較大分組。
示例 3:
輸入: "abcdddeeeeaabbbcd"
輸出: [[3,5],[6,9],[12,14]]
說明: 1 <= S.length <= 1000
題解:從數組起始位置開始判斷,定義一個變量記錄數組元素下標變化,比較與開始位置字符是否相同,相同則該變量後移,不相同則判斷分組長度是否大於等於三,並將始末位置加入到結果中,最後更新開始位置的下標。
class Solution {
public List<List<Integer>> largeGroupPositions(String S) {
List<List<Integer>> res=new ArrayList<>();
int l=S.length();
if(l<3)
return res;
for(int i=0;i<l;){
int j=i;
while(j<l&&S.charAt(j)==S.charAt(i))
j++;
if(j-i>=3){
List<Integer> tmp=new ArrayList<>();
tmp.add(i);
tmp.add(j-1);
res.add(tmp);
}
i=j;
}
return res;
}
}