在一个由小写字母构成的字符串 s
中,包含由一些连续的相同字符所构成的分组。
例如,在字符串 s = "abbxxxxzyy"
中,就含有 "a"
, "bb"
, "xxxx"
, "z"
和 "yy"
这样的一些分组。
分组可以用区间[start, end]
表示,其中start
和 end
分别表示该分组的起始和终止位置的下标。上例中的 "xxxx"
分组用区间表示为 [3,6]。我们称所有包含大于或等于三个连续字符的分组为较大分组 。找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
解题思路
遍历目标字符串s:
1、查找连续相同字符的个数(设置查询的左边界)
2、只有连续相同字符数 >= 3时,才能录入结果数组
3、改变左边界的值
class find_index{
public ArrayList find(String s) {
ArrayList res=new ArrayList();
int left=0;
while(left<s.length()) {
int count=0; //用来统计相同字符串的长度
while(left+count<s.length() && s.charAt(left)==s.charAt(left+count)) {
count++;
}
if(count>=3) {
res.add(Arrays.asList(left,left+count-1));
}
left=left+count;
}
return res;
}
}