较大分组的位置(java实现)
力扣 830. 较大分组的位置
题目说明
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。
例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。
分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 “xxxx” 分组用区间表示为 [3,6] 。
我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
1 <= s.length <= 1000s仅含小写英文字母
示例
例1
1 | 输入:s = "abbxxxxzzy" |
例2
1 | 输入:s = "abc" |
例3
1 | 输入:s = "abcdddeeeeaabbbcd" |
笔者理解
此题是一道字符串判定算法问题,在力扣题库中被定义为简单题。
解法
当笔者阅读完此题后,发现此题比较直接,“只需依次求出各个位置元素在紧随的后面出现的次数并判断”,此题中的字符串又只存在小写字母,所以我们可以依次把字符串中所有元素遍历并记录下来,再存入次数大于等于三的起始位置和终止位置即可,就让我们看看具体如何实现吧。
1 | public List<List<Integer>> largeGroupPositions(String s) { |
时间和空间效率都较高,可见此解法比较适合此题;
总结
本题是今天的每日一题,难度只有简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徐年の博客!








