[LeetCode] Palindromic Subarray Sum

3985. Palindromic Subarray Sum

You are given an integer array nums.

Return the maximum possible sum of a subarray of nums that is a palindrome.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
vector<int> manacher(vector<long long>& s) {
vector<int> dp(s.size());
for(int i = 0, l = 0, r = -1; i < s.size(); i++) {
dp[i] = max(0, min(r - i, r + l - i >= 0 ? dp[r + l - i] : -1));
while(i + dp[i] < s.size() and i - dp[i] >= 0 and s[i-dp[i]] == s[i+dp[i]]) dp[i]++;
if(r < i + dp[i]) {
r = i + dp[i];
l = i - dp[i];
}
}
return dp;
}
public:
long long getSum(vector<int>& nums) {
vector<long long> A{0}, pre{0,0};
for(int i = 0; i < nums.size(); i++) {
A.push_back(nums[i]);
pre.push_back(pre.back() + nums[i]);

A.push_back(0);
pre.push_back(pre.back());
}
vector<int> pos = manacher(A);
long long res = -1;
for(int i = 0; i < A.size(); i++) {
int l = i - pos[i] + 1, r = i + pos[i];
res = max(res, pre[r] - pre[l]);
}
return res;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2026/09/04/PS/LeetCode/palindromic-subarray-sum/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.