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; } }

浙公网安备 33010602011771号