830.较大分组的位置
题目:[https://leetcode-cn.com/problems/positions-of-large-groups/description/]
思路:题目要求统计出现3次以上字母分组,返回其首尾值的集合。通过观察,不断比较前后字母是否相等并计数,返回出现3次以上的序列值
代码
class Solution {
public:
vector<vector<int>> largeGroupPositions(string S) {
int len=S.size(),sum=1;//sum置初始化为1表示连续出现的个数
vector<int> group;
vector<vector<int>> ans;
for (int i=0; i!=len;++i) {//
if (S[i]==S[i+1]) {//当前值是否与下一个值相等
++sum;//相等,出现个数+1
}
else{//不等
if (sum>=3) {//当前值是否已经出出现了3个
group.push_back(i+1-sum);//当前位置为结束位置i,之前有sum个一样的值,除当前值以外有(sum-1)个一样的值,即第一次出现的位置为 i-(sum-1);
group.push_back(i);//当前结束位置
ans.push_back(group);
group.clear();
}
sum=1;//不等,出现新字母,置1
}
}
return ans;
}
};
vector<vector<int>> largeGroupPositions(string S) {
int i = 0, j = 0, N = S.size();//i记录一个组的起始位置,j为活动检查指针
vector<vector<int>> res;
while (j < N) {
while (j < N && S[j] == S[i]) ++j;
if (j - i >= 3) res.push_back({i, j - 1});//列表初始化值
i = j;//新的一组的开始
}
return res;
}
反思