[LeetCode]5. 最长回文子串
题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
代码
class Solution {
public:
string longestPalindrome(string s) {
int stepEven=0;
int stepOdd=0;
int max=0;
int isOdd=false;
int pos=0;
for(int i=0;i<s.length();i++)
{
//奇数
for(int step=0;(i-step>=0)&&(i+step<s.length());step++)
{
if(s[i-step]!=s[i+step])
break;
stepOdd=step*2+1;
}
if(stepOdd>max)
{
max=stepOdd;
isOdd=true;
pos=i;
}
//偶数
for(int step=1;(i-step+1>=0)&&(i+step<s.length());step++)
{
if(s[i-step+1]!=s[i+step])
break;
stepEven=step*2;
}
if(stepEven>max)
{
max=stepEven;
isOdd=false;
pos=i;
}
}
string result;
if(isOdd)
{
result=s.substr(pos-(max-1)/2,max);
}
else
{
result=s.substr(pos-max/2+1,max);
}
return result;
}
};
思路
采用中心扩展法,一共要考虑两种情况:第一种就是回文字符串长度为奇数,从最中间的那个字符开始比较的话是比较它左右的字符串,比如"11322"
,从3开始比较;第二种就是回文字符串长度为偶数,如果是"2112"
的话,那么最开始比较的是第一个1
;比较完后返回字符串的时候要分别考虑奇偶来切分子串。
作者:lizhenghao126
出处:https://www.cnblogs.com/lizhenghao126/p/11053680.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
https://github.com/li-zheng-hao
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)