LeetCode-【數組】-較大分組的位置

在一個由小寫字母構成的字符串 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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章