830. 较大分组的位置

830. 较大分组的位置

 

 

 

 

 

 

--解题思路--

方法一:双指针模式(未对结尾做处理)

start--开始位置     end--结束位置

当end-start>=2时,将会[start,end]加入列表中

注意:到最后所有字符串读取完成后,还要再次判断:

           当end-start>=2时,[start,end]加入列表中

 

方法二:双指针模式(对结尾做处理)

将结尾添加一个特殊字符,当字符串结束时便不需要再次判断

--解题代码--

方法一:双指针模式(未对结尾做处理)

class Solution {
    public List<List<Integer>> largeGroupPositions(String s) {
        List<List<Integer>> list = new ArrayList<>();
        if(s.length()<3) return list;

        int start=0,end=0;//记录开始、结束位置
        for(int i=1;i<s.length();++i){
            if(s.charAt(i)!=s.charAt(start)){
                if(end-start>1){
                    List<Integer> temp = new ArrayList<>();
                    temp.add(start);
                    temp.add(end);
                    list.add(temp);
                }
                start = i;
            }
            end++;
        }

        if(end-start>1){
            List<Integer> temp = new ArrayList<>();
            temp.add(start);
            temp.add(end);
            list.add(temp);
        }

        return list;

    }
}

 

方法二:双指针模式(对结尾做处理)

class Solution {
    public List<List<Integer>> largeGroupPositions(String s) {
         List<List<Integer>> list = new ArrayList<>();
        if(s.length()<3) return list;
        s+="@";
        int start=0;
        for(int i=1;i<s.length();++i){
            if(s.charAt(i)!=s.charAt(start)){
                if(i-start>=3){
                    List<Integer> temp = new ArrayList<>();
                    temp.add(start);
                    temp.add(i-1);
                    list.add(temp);
                }
                start = i;

            }
        }
        return list;

    }
}

 

posted @ 2021-01-06 10:27  进击的小渣渣!!  阅读(68)  评论(0)    收藏  举报