In a string S
of lowercase letters, these letters form consecutive groups of the same character.
For example, a string like S = "abbxxxxzyy"
has the groups "a"
, "bb"
, "xxxx"
, "z"
and "yy"
.
Call a group large if it has 3 or more characters. We would like the starting and ending positions of every large group.
The final answer should be in lexicographic order.
字符S中都是小写字符,这些字符由连续的相同字母组成
例如,S = "abbxxxxzyy"有"a"
, "bb"
, "xxxx"
, "z"
"yy"这些组。
我们把其中含有3个或者三个以上字母的字符叫做一个large group。我们希望找到每一个large group的起始和终止位置,按照S中的字母排序顺序返回。
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]]
Note:
1 <= S.length <= 1000
Solutions:
Python
class Solution:
def largeGroupPositions(self, S):
"""
:type S: str
:rtype: List[List[int]]
"""
start,end,length = 0,1,len(S)
result = []
while end<length:
while end<length and S[start]==S[end]:
#这个判断一定先判断end<length,否则会报list index 溢出的错误,由此可见,判断条件即便是and的情况,判断也是有先后顺序的
end+=1
if end-start >=3:
result.append([start,end-1])
start = end
return result
class Solution {
public:
vector<vector<int>> largeGroupPositions(string S) {
int start = 0;
int end = 1;
int length = S.size();
vector<vector<int>> result;
while(end<length){
while(end<length && S[start]==S[end]){
end++;
}
if (end-start>=3){
result.push_back({start,end-1});
}
start = end;
}
return result;
}
};