Skip to main content

Leetcode 5: Longest Palindromic Substring

 

1. Problem Statement (Simple Explanation):


You are given a string s.

You need to return the longest substring of s that is a palindrome.

  • palindrome is a string that reads the same forwards and backwards.

  • substring is a contiguous part of the string.

You can return any one longest palindromic substring if there are multiple answers.


2. Examples:


Example 1

Input: s = "babad"

Output: "bab"

Explanation:

  • Palindromic substrings include "bab", "aba", "b", "a", "d", etc.

  • "bab" and "aba" both have length 3.

  • You can return either "bab" or "aba".


Example 2

Input: s = "cbbd"

Output: "bb"

Explanation:

  • Palindromic substrings: "c", "b", "bb", "d".

  • Longest is "bb" (length 2).


Constraints

  • 1≤∣s∣≤1000

  • s consists only of digits and English letters.


3. Approach 1 – Brute Force (Check All Substrings):


Intuition


  • Generate all substrings of s.

  • For each substring, check if it is a palindrome.

  • Track the longest palindromic substring.

This is straightforward but too slow for ∣s∣=1000.


Algorithm (High Level)


  1. For every pair (i, j) with 0 <= i <= j < n:

    • Consider substring s[i..j].

    • Check if s[i..j] is a palindrome by comparing characters from both ends.

    • If palindromic and longer than current best, update the answer.


Pseudo-code (Brute Force)


Complexity
  • Checking all substrings: O(n2) substrings.

  • Each palindrome check: O(n) worst case.

  • Total time: O(n3)

  • Space: O(1)

Good for understanding, but too slow.


4. Approach 2 – Expand Around Center (O(n²), Practical and Common):


This is the standard interview solution.


Intuition


A palindrome is symmetric around its center.

  • For odd-length palindromes: a single center character, e.g., "aba" centered at 'b'.

  • For even-length palindromes: center is between two characters, e.g., "abba" centered between the two 'b's.

For each index or gap in s, we:

  • Expand outwards (left--, right++) while characters are equal.

  • Track the longest palindrome found.

There are 2n - 1 possible centers:

  • n odd centers at each character.

  • n - 1 even centers between characters.


Helper: Expand from the Center


Given a center (left, right), expand while s[left] == s[right] and inside bounds.

Return the length of the palindrome.


Pseudo-code (Expand Around Center)



Complexity

  • For each of the n positions, we expand in O(n) worst case.

  • Total time: O(n2)

  • Extra space: O(1)

For n <= 1000, this is fast enough and is the typical accepted solution.


5. Approach 3 – Dynamic Programming (O(n²) Time, O(n²) Space):


Idea


Use a 2D boolean DP table dp[i][j]:

  • dp[i][j] = true if substring s[i..j] is a palindrome.

Recurrence:

  • Single char always palindrome:

    • dp[i][i] = true

  • Two chars:

    • dp[i][i+1] = (s[i] == s[i+1])

  • More than two chars:

    • dp[i][j] = (s[i] == s[j]) and dp[i+1][j-1]

Then iterate substrings by length and track the longest palindromic substring.

But this uses O(n2) space, and center-expansion is usually preferred.


6. Java code:



7. C code:



8. C++ code:


9. Python code:



10. JavaScript code:




Comments

Popular posts from this blog

Leetcode 1: Two Sum

  Leetcode Link: https://leetcode.com/problems/two-sum/ 1. Problem Statement (Simple Explanation) You are given: An array of integers nums An integer target You need to  return the indices of two numbers in the array  such that: Conditions: Each input has  exactly one solution . You  cannot use the same element twice . You can return the answer in  any order . 2. Examples Example 1 Input:                                    nums = [2, 7, 11, 15], target = 9 Output:                                 [0, 1] Explanation:                     nums[0]+nums[1]=2+7=9              So we return [0, 1]. Example 2 Input:           ...

Leetcode 3: Longest Substring Without Repeating Characters

  Leetcode Link 1. Problem Statement (Simple Explanation) You are given a string s. You need to find the length of the longest substring of s that does not  contain any repeated characters. A substring is a contiguous sequence of characters in the string. You must return an integer length, not the substring itself. 2. Examples Example 1 Input: s = "abcabcbb" Output: 3 Explanation: Some substrings without repeating characters: "abc", "bca", "cab"The longest length is 3. Example 2 Input: s = "bbbbb" Output: 1 Explanation: All substrings that are valid are just "b". The longest length is 1. Example 3 Input:   s = "pwwkew" Output:   3 Explanation: Possible substrings without repetition: "pw", "wke", "kew". "wke" or "kew" have length 3. "pwke" is not valid because it’s not contiguous in the original string (p and k are separated by ww). Constraints...

Leetcode 2: Add Two Numbers

Leetcode Link: https://leetcode.com/problems/add-two-numbers/ 1. Problem Statement (Simple Explanation) You are given  two non-empty linked lists , l1 and l2, that represent two non-negative integers. Each node contains a  single digit . The digits are stored in  reverse order  (i.e., the 1’s digit is at the head). You need to  add the two numbers  and return the  sum as a linked list , also in reverse order. You can assume: There are  no leading zeros , except when the number itself is 0. 2. Examples Example 1 Input:                l1 = [2,4,3]                l2 = [5,6,4]           Interpreting linked lists as numbers (reverse order): l1 represents 342 l2 represents 465 Output:                [7,0,8] Explanation:        ...