830. Positions of Large Groups
题目
有一个小写字母的字符串,这个字符串有一些连续相同的字符。
比如,字符串S="abbxxxxxzyy"有这些连续的字符"a","bb","xxxx","z","yy"。
如果一个字符连续至少出现了3次,我们称它为large group。写一个函数,传入该字符串,然后返回一个数组,然后返回这个字符串所有的large group,需要注意的是,每一个数组的项是一个整数数组,数组的两个值分别代表该large group字符开始和结束的下标。需要注意的是,只有一个字符串至少连续出现3次才能纳入这个返回的数组结果集中。
同时,最后的结果需要按照字典序排序。(但是实际上我看leetcode并没有这样,所以,你也可以不用管这个case)。
Example 1:
Input: "abbxxxxzzy"
Output: [[3,6]]
Explanation: "xxxx" is the single large group with starting 3 and ending positions 6.
Example 2:
Input: "abc"
Output: []
Explanation: We have "a","b" and "c" but no large group.
Example 3:
Input: "abcdddeeeeaabbbcd"
Output: [[3,5],[6,9],[12,14]]
思路
其实比较简单,从头开始遍历,然后每次和上次找到的字符串进行比较,如果相同进行下一轮的比较,当发现不一致的时候,看下上一次的那个值是否满足large group的条件,如果满足,放入结果集中即可。
func largeGroupPositions(S string) [][]int {
length := len(S)
start := 0
res := make([][]int, 0)
for i := 0; i < length; i++ {
if i == length-1 || S[i] != S[i+1] {
if i-start+1 >= 3 {
res = append(res, []int{start, i})
}
start = i + 1
}
}
return res
}
完整代码见:https://github.com/scofieldpeng/leetcode/blob/master/largeGroupPositions/largeGroupPositions.go
原题目见:https://leetcode.com/problems/positions-of-large-groups/