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;
    }
};

讨论区[https://leetcode.com/problems/positions-of-large-groups/discuss/128957/C++JavaPython-Straight-Forward]
范例代码

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;
}

反思

posted @ 2018-09-19 14:19  Kipper  阅读(270)  评论(0编辑  收藏  举报