DEV Community

Ratan
Ratan

Posted on

Coding Challenges: Engage and Learn Through Problem Solving

Coding Challenges: Engage and Learn Through Problem Solving

Coding challenges are a fantastic way to improve your programming skills, engage with a community, and learn new techniques. In this blog post, we'll present a coding challenge, discuss various approaches to solve it, and invite readers to share their solutions in the comments. Let's dive in!

Challenge: Find the Longest Palindromic Substring

Problem:
Given a string s, find the longest palindromic substring in s. A palindrome is a string that reads the same backward as forward.

Example:

Input: s = "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Enter fullscreen mode Exit fullscreen mode

Constraints:

  • 1 <= s.length <= 1000
  • s consists of only digits and English letters.

Please share your Solutions with creative approaches using different programming languages.

Step-by-Step Guide to Solve the Challenge

Step 1: Understand the Problem

Before jumping into the code, make sure you understand the problem. A palindromic substring is a sequence of characters that reads the same backward as forward. Our goal is to find the longest such substring in the given string s.

Step 2: Plan Your Approach

There are several ways to solve this problem. We'll discuss three approaches:

  1. Brute Force
  2. Expand Around Center
  3. Dynamic Programming

Step 3: Implement the Brute Force Approach

The brute force approach involves checking all possible substrings and determining if they are palindromes. This method is straightforward but not efficient for large strings.

def longest_palindrome_brute_force(s):
    def is_palindrome(sub):
        return sub == sub[::-1]

    n = len(s)
    longest = ""
    for i in range(n):
        for j in range(i, n):
            if is_palindrome(s[i:j+1]) and len(s[i:j+1]) > len(longest):
                longest = s[i:j+1]
    return longest


print(longest_palindrome_brute_force("babad"))  # Output: "bab" or "aba"
Enter fullscreen mode Exit fullscreen mode

Step 4: Implement the Expand Around Center Approach

This approach involves expanding around each character (and between characters) to find the longest palindrome. It's more efficient than brute force.

def longest_palindrome_expand_center(s):
    def expand_around_center(left, right):
        while left >= 0 and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left+1:right]

    longest = ""
    for i in range(len(s)):
        # Odd length palindromes
        odd_palindrome = expand_around_center(i, i)
        if len(odd_palindrome) > len(longest):
            longest = odd_palindrome
        # Even length palindromes
        even_palindrome = expand_around_center(i, i+1)
        if len(even_palindrome) > len(longest):
            longest = even_palindrome
    return longest


print(longest_palindrome_expand_center("babad"))  # Output: "bab" or "aba"
Enter fullscreen mode Exit fullscreen mode

Step 5: Implement the Dynamic Programming Approach

The dynamic programming approach uses a table to store whether a substring is a palindrome, leading to an efficient solution.

def longest_palindrome_dp(s):
    n = len(s)
    if n == 0:
        return ""
    dp = [[False] * n for _ in range(n)]
    start, max_length = 0, 1

    for i in range(n):
        dp[i][i] = True

    for length in range(2, n+1):
        for i in range(n-length+1):
            j = i + length - 1
            if s[i] == s[j]:
                if length == 2 or dp[i+1][j-1]:
                    dp[i][j] = True
                    if length > max_length:
                        start = i
                        max_length = length

    return s[start:start+max_length]


print(longest_palindrome_dp("babad"))  # Output: "bab" or "aba"
Enter fullscreen mode Exit fullscreen mode

Try optimizing the algorithms.

Top comments (1)

Collapse
 
ratan_3511 profile image
Ratan

please try optimizing the algorithms.