Home >Backend Development >Python Tutorial >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!
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.
Constraints:
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.
There are several ways to solve this problem. We'll discuss three approaches:
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" <h4> Step 4: Implement the Expand Around Center Approach </h4> <p>This approach involves expanding around each character (and between characters) to find the longest palindrome. It's more efficient than brute force.<br> </p> <pre class="brush:php;toolbar:false">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"
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"
The above is the detailed content of Coding Challenges: Engage and Learn Through Problem Solving. For more information, please follow other related articles on the PHP Chinese website!