3208. 交替组 II

130 阅读1分钟

链接:leetcode.cn/problems/al…

思路

用一个dp[i]数组记录以i下标结尾的最长交替组,填充数组长度为n+k以方便统计,当i>=k,dp[i]长度超过k时,ans++

代码实现

class Solution {
public:
    int numberOfAlternatingGroups(vector<int>& colors, int k) {
        int n=colors.size();
        vector<int>a;
        for(int i=n-k;i<n;i++){
            a.push_back(colors[i]);
        }
        for(int i=0;i<n;i++){
            a.push_back(colors[i]);
        }

        n=a.size();

        vector<int>dp(n,0);
        dp[0]=1;
        int ans=0;
        for(int i=1;i<n;i++){
            if(a[i]!=a[i-1]){
                dp[i]=dp[i-1]+1;
            }else{
                dp[i]=1;
            }

            if(i>=k&&dp[i]>=k){
                ans++;
            }
        }
        return ans;
    }
};