最长回文子串(Longest Palindromic Substring)是一个经典的字符串处理问题,它要求找到给定字符串中最长的回文子串。回文子串是指正读和反读都相同的字符串。
def longest_palindromic_substring(s):
n = len(s)
if n == 0:
return ""
# dp[i][j] will be 'true' if the string from index i to j is a palindrome.
dp = [[False] * n for _ in range(n)]
start = 0
max_length = 1
# All substrings of length 1 are palindromes
for i in range(n):
dp[i][i] = True
# Check for sub-string of length 2.
for i in range(n - 1):
if s[i] == s[i + 1]:
dp[i][i + 1] = True
start = i
max_length = 2
# Check for lengths greater than 2.
for length in range(3, n + 1):
for i in range(n - length + 1):
j = i + length - 1
if s[i] == s[j] and dp[i + 1][j - 1]:
dp[i][j] = True
start = i
max_length = length
return s[start:start + max_length]
# Example usage
print(longest_palindromic_substring("babad")) # Output: "bab" or "aba"
def longest_palindromic_substring(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
palindrome_odd = expand_around_center(i, i)
if len(palindrome_odd) > len(longest):
longest = palindrome_odd
# Even length palindromes
palindrome_even = expand_around_center(i, i + 1)
if len(palindrome_even) > len(longest):
longest = palindrome_even
return longest
# Example usage
print(longest_palindromic_substring("babad")) # Output: "bab" or "aba"
通过这两种方法,可以有效地找到最长回文子串,并根据具体需求选择合适的方法。
领取专属 10元无门槛券
手把手带您无忧上云