等差数列划分--关于子串的数量规律

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等差数列划分--关于子串的数量规律相关的知识,希望对你有一定的参考价值。

题目

解法一:dfs暴力解法 O(N^2)

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        if(n<3)return 0;
        int gap[n];
        memset(gap,0,sizeof gap);
        int index = 1;
        //把数组的所有相邻差值记录下来
        for(int i=0;i<n-1;i++){
            gap[index++] = nums[i+1]-nums[i];
        }
        int cnt = 0;
        //dfs爆搜
        function<void(int ,int)> dfs = [&](int k,int pos){
            if(k>=1)
                cnt++;
            if(pos>n-1)
                return;
            if(gap[pos]==gap[pos-1])
                dfs(k+1,pos+1);
        };
        for(int i=2;i<n;i++){
            dfs(0,i);
        }
        return cnt;
    }
};

解法二:利用子串数量规律实现O(N)

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        if (n == 1) {
            return 0;
        }

        int d = nums[0] - nums[1], t = 0;
        int ans = 0;
        // 因为等差数列的长度至少为 3,所以可以从 i=2 开始枚举
        for (int i = 2; i < n; ++i) {
            if (nums[i - 1] - nums[i] == d) {
                ++t;
            }
            else {
                d = nums[i - 1] - nums[i];
                t = 0;
            }
            ans += t;
        }
        return ans;
    }
};

以上是关于等差数列划分--关于子串的数量规律的主要内容,如果未能解决你的问题,请参考以下文章

python如何在给定的字符串中,统计某个特定子串的数量?

#1589 : 回文子串的数量

647. Palindromic Substrings 回文子串的数量

用一个唯一元素计算长度为 3+ 的二进制子串的数量

Hihocoder #1602 : 本质不同的回文子串的数量 manacher + BKDRhash

[面试题]找出字符串在集合中的子串数量(字符串)