📅  最后修改于: 2023-12-03 14:58:36.045000             🧑  作者: Mango
这是一道程序员们可以挑战的编程题目,出自于 2006 年的门|门 IT 比赛第 84 题。此题要求程序员设计一个算法,对一段字符串进行操作,从中找到最长的回文子串并返回。
给定一个长度为 $n$ 的字符串 $s$,找出字符串中的最长回文子串。
回文字符串,指的是从左往右和从右往左读取都完全一样的字符串。
例如,字符串 "racecar" 就是一个回文字符串,因为从左往右和从右往左都为 "racecar"。
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Input: "cbbd"
Output: "bb"
回文子串的特点是中心对称,那么我们可以从字符串中心往两边探寻,通过比较字符是否一致来确定回文子串,并记录其中的最大值。
代码实现时,可以通过遍历字符串,以每个字符为中心点进行探索,同时对两种情况进行判断,即单个字符为中心和两个字符为中心的情况。
示例代码:
class Solution:
def longestPalindrome(self, s: str) -> str:
if not s:
return ""
n = len(s)
left = right = 0
for i in range(n):
# 以单个字符为中心点探索
l, r = i, i
while l >= 0 and r < n and s[l] == s[r]:
l -= 1
r += 1
if r - l - 1 > right - left:
left, right = l + 1, r - 1
# 以两个字符为中心点探索
l, r = i, i + 1
while l >= 0 and r < n and s[l] == s[r]:
l -= 1
r += 1
if r - l - 1 > right - left:
left, right = l + 1, r - 1
return s[left:right+1]
此题是一道经典而优雅的算法问题,算法核心部分基于探索对称性,程序员可以通过思考和实践加深对算法的理解,提高算法设计和实现能力。