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

算法与数据结构(最长回文子串)

题目

思路

这个题可以用中心扩展法。遍历每个可能的中心点,然后向两边扩展,记录最长的回文子串。这样可以覆盖所有可能的奇数长度和偶数长度的回文情况。

首先可以写一个扩展函数,返回值的类型为pair<int,int>。

若left和right在字符串s的范围内且s[left] == s[right]则扩展一位(left--,right++)。

最后返回满足条件的子串的范围。

auto [left1,right1] = expand(s,i,i);
auto [left2,right2] = expand(s,i,i+1);

这个是用来求两种情况:子串长度为1,子串长度为2。

若比end-start的长度长,则更新start和end的值。

return s.substr(start,end-start+1);

这个函数是用来求s字符串从位置start开始,长度为end-start+1的子串。

代码

class Solution {
public:
    pair<int,int> expand(string s, int left, int right)
    {
        //从中间向两边扩展
        while(left >= 0 && right < s.size() && s[left] == s[right])
        {
            left--;
            right++;
        }
        return {left+1,right-1};
    }
    string longestPalindrome(string s) 
    {
        int start=0,end=0;
        for(int i=0; i<s.size();i++)
        {
            auto [left1,right1] = expand(s,i,i);
            auto [left2,right2] = expand(s,i,i+1);
            if(right1 - left1 > end - start)
            {
                start = left1;
                end = right1;
            }
            if(right2 - left2 > end - start)
            {
                start = left2;
                end = right2;
            }
        }
        return s.substr(start,end-start+1);
    }
};


http://www.kler.cn/a/579523.html

相关文章:

  • PTA L2一些题目
  • 学习网络安全需要哪些基础?
  • ubuntu直接安装mobaxterm
  • 大模型最新面试题系列:训练篇之模型监控与调试
  • CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划
  • 串口助手的C#编写以及有人串口服务器USR-DR301的使用
  • 《用Python+PyGame开发双人生存游戏!源码解析+完整开发思路分享》
  • QT——对象树
  • 数据分析和可视化课程实验报告一(数据分析基础)
  • 如何通過安裝輕量性圖形界面減少Linux服務器壓力
  • c#面试题整理7
  • 利用pdf.js+百度翻译实现PDF翻译,创建中文PDF
  • SpringBoot 自定义异常处理
  • SparkAi系统体验
  • 【最后203篇系列】011 Mongo异步代理开发回顾
  • golang 从零单排 (一) 安装环境
  • 京东POP商家小程序电商布局策略与优化路径研究
  • 《Python实战进阶》No17: 数据库连接与 ORM(SQLAlchemy 实战)
  • 从零开始的 Kafka 学习(二)| 集群启动
  • vue+element|el-tree树设置懒加载和设置默认勾选