音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 最长回文子串
368 字
2 分钟
LeetCode | 最长回文子串
分类:双指针/字符串
题目#
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
1输入:s = "babad"2输出:"bab"3解释:"aba" 同样是符合题意的答案。示例 2:
1输入:s = "cbbd"2输出:"bb"讲解#
回文串以中心向两侧对称,所以枚举每个位置当中心,向两边扩展比较。
关键点:回文中心有两种——奇数长度是单个字符 (i, i),偶数长度是相邻两字符中间 (i, i + 1)。两种都要试。
expand(left, right) 从中心向两侧扩展,只要左右字符相等就继续外扩,直到不相等或越界。因为循环结束时左右指针已经多走了一步,所以切片取 s[left + 1:right]。
说明: 官方分类在多维动态规划。我这种题解是双指针。
复杂度#
- 中心扩展法:
- 时间复杂度:
O(n^2) - 空间复杂度:
O(1)
- 时间复杂度:
代码#
源码#
1class Solution:2 def longestPalindrome(self, s: str) -> str:3 def expand(left: int, right: int) -> str:4 while left >= 0 and right < len(s) and s[left] == s[right]:5 left -= 16 right += 17 return s[left + 1:right]8
9 ans = ""10 for i in range(len(s)):11 odd = expand(i, i)12 even = expand(i, i + 1)13 ans = max(ans, odd, even, key=len)14 return ans测试#
1sol = Solution()2
3assert sol.longestPalindrome("babad") in ("bab", "aba")4assert sol.longestPalindrome("cbbd") == "bb"5assert sol.longestPalindrome("a") == "a"6assert sol.longestPalindrome("ac") == "a"7
8print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
LeetCode | 最长回文子串
https://leetcode.cn/problems/longest-palindromic-substring/最后更新于 2026-08-21
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 移动零
LeetCodeLeetCode 移动零题解:使用双指针原地移动零,同时保持非零元素相对顺序。
2
LeetCode | 无重复字符的最长子串
LeetCodeLeetCode 无重复字符的最长子串题解:使用哈希集合与滑动窗口维护不含重复字符的连续片段。
3
LeetCode | 双指针
LeetCode整理 LeetCode 双指针题目的核心思路:用两个指针描述位置或范围,并按规则移动,涵盖移动零、盛水容器、三数之和、接雨水、最长回文子串。
4
LeetCode | 接雨水
LeetCodeLeetCode 接雨水题解:理解每个位置的左右挡板,用双指针在线性时间内计算总积水量。
5
LeetCode | 有效的括号
LeetCodeLeetCode 有效的括号题解:使用栈解决括号匹配问题,字典映射右括号到左括号,时间复杂度 O(n)。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



