Leetcode题目总结[5]最长回文子串

题目描述

给你一个字符串 s,找到 s 中最长的回文子串。

 

示例 1:

输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd" 输出:"bb"

示例 3:

输入:s = "a" 输出:"a"

示例 4:

输入:s = "ac" 输出:"a"

 

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母(大写和/或小写)组成

做法

方法1

暴力做法

从大到小枚举子串并判断该子串是否合法

时间复杂度O(n3)

提交会超时,87/177左右

代码

方法1

复制代码
1 /* 2 * @lc app=leetcode.cn id=5 lang=cpp 3 * 4 * [5] 最长回文子串 5 */ 6 7 // @lc code=start 8 class Solution { 9 public: 10 string longestPalindrome(string s) { 11 int len1 = s.length(); 12 int len2 = len1; 13 //len2--; 14 bool flag = true; 15 string str; 16 if(len1 == 1) return s; 17 //printf("%d %d\n",len1,len2); 18 while(len2) 19 { 20 //printf("%d\n",len2); 21 if(len2 % 2 == 0) 22 { 23 for(int i = 0; i <= len1 - len2; i++) 24 { 25 for(int j = 1; j <= len2 / 2; j++) 26 { 27 if(s[i + j - 1] != s[i + len2 - j]) 28 { 29 flag = false; 30 } 31 } 32 if(flag == true) 33 { 34 for(int j = 1; j <= len2; j++) 35 { 36 str.push_back(s[i + j - 1]); 37 } 38 printf("%d",len2); 39 return str; 40 } 41 flag = true; 42 } 43 } 44 else 45 { 46 for(int i = 0; i <= len1 - len2; i++) 47 { 48 for(int j = 1; j <= len2 / 2; j++) 49 { 50 if(s[i + j - 1] != s[i + len2 - j]) 51 { 52 flag = false; 53 } 54 } 55 if(flag == true) 56 { 57 for(int j = 1; j <= len2; j++) 58 { 59 str.push_back(s[i + j - 1]); 60 } 61 return str; 62 } 63 flag = true; 64 } 65 } 66 len2--; 67 } 68 return str; 69 } 70 }; 71 // @lc code=end
复制代码

 


__EOF__

本文作者cheng_zhi
本文链接https://www.cnblogs.com/chengzhid/p/15226326.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cheng_zhi  阅读(36)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示