当前位置: 首页 > news >正文

【C++算法】62.字符串_最长回文子串

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

5. 最长回文子串


题目描述:

b26c772cb3b8a0f5b35674a56f06c1e2


解法

解法:中心扩展算法

奇数版:

09eedc84b35381457e0a671af8d00d9c

偶数版:

8d02de41307bbf01cf19108c9a72d893


C++ 算法代码:

class Solution 
{
public:string longestPalindrome(string s) {// 中心扩展算法// 基本思路:从字符串的每个位置作为中心点开始,向两边扩展,寻找最长的回文子串int begin = 0;   // 记录最长回文子串的起始位置int len = 0;     // 记录最长回文子串的长度int n = s.size(); // 字符串总长度// 依次枚举字符串中的每个位置作为回文中心for(int i = 0; i < n; i++) {// 情况1:处理奇数长度的回文串(如"aba",中心是单个字符)int left = i, right = i; // 初始时,左右指针都指向当前位置i// 从中心向两边扩展,直到不满足回文条件或者到达边界while(left >= 0 && right < n && s[left] == s[right]){left--;  // 左指针向左移动right++; // 右指针向右移动}// 循环结束时,left和right已经指向不满足回文条件的位置// 实际回文子串的范围是[left+1, right-1],长度为right-left-1if(right - left - 1 > len) // 如果找到更长的回文子串{begin = left + 1;      // 更新起始位置len = right - left - 1; // 更新长度}// 情况2:处理偶数长度的回文串(如"abba",中心是两个字符之间的位置)left = i;         // 左指针指向位置iright = i + 1;    // 右指针指向位置i+1// 同样从中心向两边扩展while(left >= 0 && right < n && s[left] == s[right]){left--;right++;}// 同样检查是否找到更长的回文子串if(right - left - 1 > len){begin = left + 1;len = right - left - 1;}}// 返回最长回文子串,使用substr从原字符串中截取return s.substr(begin, len);}
};

相关文章:

  • pool层种类
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4):できます 完成了等 しか。。。ない 只有
  • Day(21)--网络编程
  • 深度学习基础:从入门到理解核心概念
  • Day09【基于jieba分词和RNN实现的简单中文分词】
  • AI大模型从0到1记录学习 数据结构和算法 day19
  • 【ssti模板注入基础】
  • 如何学习嵌入式
  • 阿里云OSS
  • 回收镀锡废水的必要性(笔记)
  • jwt的无感刷新
  • 【天外之物】叉乘获得法向量
  • Linux——进程通信
  • Serverless集群搭建:Knative
  • Vulhub - Goldeneye记录
  • ON DUPLICATE KEY UPDATE 更底层解释它的优势
  • 快速排序(2)
  • 天线静电防护:NRESDTLC5V0D8B
  • ‌软件接口压力测试方案模板
  • 如何编译得到elf文件
  • 网站如可引导客户/哈尔滨网站推广
  • 设计网站公司哪里好/项目外包平台
  • 专业网站建设价格最优/哪里有网站推广优化
  • flash网站php源码/青岛网络推广公司哪家好
  • 长春网站开发/自动推广引流app
  • 建设人才库网站/广州市新闻最新消息