Skip to content
c++
class Solution {
    std::vector<int> expend(const std::vector<int>& nums){
        std::vector<int>res;res.reserve(2*nums.size()+3);
        res.push_back(-1);
        res.push_back(0);
        for(int i=0;i<nums.size();i++)res.push_back(nums[i]),res.push_back(0);
        res.push_back(-2);
        return res;
    }

    std::vector<int> Manacherss(const std::vector<int>& nums){
        auto t=expend(nums);
        std::vector<int>p(t.size());
        for(int i=1,r=0,c=0;i<t.size()-1;i++){
            p[i]=(r>i?std::min(p[2*c-i],r-i):1);
            while(t[i-p[i]]==t[i+p[i]])++p[i];
            if(i+p[i]>r)r=i+p[i],c=i;
        }
        return p;
    }
public:
    long long getSum(vector<int>& nums) {
        auto p=Manacherss(nums);
        std::vector<long long>pre(1+nums.size());
        for(int i=1;i<=nums.size();i++)pre[i]=pre[i-1]+nums[i-1];

        long long mx=0;
        for(int i=1;i<p.size()-1;i++){
            int str=(i-p[i])/2;
            int len=p[i]-1;
            int end=str+len-1;
            mx=std::max(mx,pre[end+1]-pre[str]);
        }

        return mx;
    }
};