Palindromic Substrings

Count palindromic substrings of s using expand-around-center in O(n²).

Medium
Time O(n^2) Space O(1)
LeetCode
3 min read
dp string

Problem#

Return the count of palindromic substrings (different starts or ends counted separately).

Examples#

  • "abc"3
  • "aaa"6

Constraints#

  • 1 <= n <= 1000.

Approach#

For each center (single char and inter-char), expand outward while characters match. Count each successful expansion.

Solution#

Palindromic Substrings
class Solution {
public:
int countSubstrings(string s) {
int count = 0;
for (int center = 0; center < (int)s.size(); ++center) {
count += expand(s, center, center);
count += expand(s, center, center + 1);
}
return count;
}
private:
int expand(const string& s, int l, int r) {
int n = 0;
while (l >= 0 && r < (int)s.size() && s[l] == s[r]) { ++n; --l; ++r; }
return n;
}
};

Editorial#

Expand-around-center is O(n²) worst-case but cleaner than O(n²) 2D DP. There are 2n - 1 possible centers (n single-char + n-1 between-char). Manacher’s gives O(n) but is much more complex.

Complexity#

  • Time: O(n²).
  • Space: O(1).

Concept revision#

Search ESC

Keyboard shortcuts

Shortcuts are disabled while typing in inputs.