两种解法,动态规划和KMP变种
动态规划,类似于lcs的解法,数组flag[i][j]记录s从i到j是不是回文
首先初始化,i>=j时,flag[i][j]=true,这是因为s[i][i]是单字符的回文,当i>j时,为true,是因为有可能出现flag[2][1]这种情况,比如bcaa,当计算s从2到3的时候,s[2]==s[3],这时就要计算s[2+1] ?= s[3-1],总的来说,当i>j时置为true,就是为了考虑j=i+1这种情况。
接着比较s[i] ?= s[j],如果成立,那么flag[i][j] = flag[i+1][j-1],否则直接flag[i][j]=false
上代码
1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 int len = s.length(), max = 1, ss = 0, tt = 0; 5 bool flag[len][len]; 6 for (int i = 0; i < len; i++) 7 for (int j = 0; j < len; j++) 8 if (i >= j) 9 flag[i][j] = true; 10 else flag[i][j] = false; 11 for (int j = 1; j < len; j++) 12 for (int i = 0; i < j; i++) 13 { 14 if (s[i] == s[j]) 15 { 16 flag[i][j] = flag[i+1][j-1]; 17 if (flag[i][j] == true && j - i + 1 > max) 18 { 19 max = j - i + 1; 20 ss = i; 21 tt = j; 22 } 23 } 24 else flag[i][j] = false; 25 } 26 return s.substr(ss, max); 27 } 28 };
解法2:字符串s中的最长回文串是s的倒转s'和s的最长连续公共子串,代码就不写了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库