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

【力扣hot100题】(092)最长回文串

有点难度,一开始想到的两种方法都不对,花了不少时间。

先说之前的方法:

① 遍历每个点,每个点向外扩张,如果左等于右就一直扩展直到不等。

这个方法可是可以,但我没有考虑到两个相同字母也是回文串的情况(偶数长度的回文串),所以失败了,并且也没有用到考点动态规划,遂放弃。

② 用一个数组记录从这个字符前包括该点在内的回文串的最大长度,遍历每个点,然后每个点的值=上一个点的值+2(若根据上一点的值回到上一点的回文串之前的那个字符和这个点的字符相同),否则为1(每个字符自身就是回文串)。

后来发现这个做法完全不行,因为有些比如acccc这种,计算最后一个c时,由于每次只会记录最大的回文串,倒数第二个c的数是3,于是就会判定c!=a,无法记录最长的回文串cccc。

所以还是得二维数组。

根据首位序号维护布尔类型的二维数组,每个值记录首位字符括起来的串是否为回文串,这样做状态转换方程比较难想。

自己在草稿纸上画个二维数组就好想得多。

我的方法是将palindrome[i][j]设为第i个字符到第j个字符是否是回文串(包括边界i和j)。

当前字符palindrome[i][j]是回文串的条件是:palindrome[i-1][j+1](意思是两边界缩小1位是否是回文串)并且s[j]==s[i](两边界自身相同)。

然后palindrome[i][i]必为回文串,如果s[i-1]=s[i],那么palindrome[i-1][i]也为回文串。

从i=1开始遍历到结束(i是起始字符),从j=i-1开始遍历到j=0(j是结束字符,中间字符长度要从小到大,所以j要从大到小)。

class Solution {
public:
    string longestPalindrome(string s) {
        vector<vector<bool>> palindrome(s.size(),vector<bool> (s.size(),0));
        int result=1;
        string re=s.substr(0,1);
        for(int i=0;i<s.size();i++){
            palindrome[i][i]=1;
            for(int j=i-1;j>=0;j--){
                if(j==i-1&&s[j]==s[i]) palindrome[i][j]=1;
                if(palindrome[i-1][j+1]==1&&s[j]==s[i]) palindrome[i][j]=1;
                if(palindrome[i][j]==1&&i-j+1>result){
                    result=i-j+1;
                    re=s.substr(j,i-j+1);
                }
            }
        }
        return re;
    }
};


文章转载自:

http://6R36XtRr.nnpwg.cn
http://ZTtPV9mm.nnpwg.cn
http://E6gXVdqQ.nnpwg.cn
http://yn1Aag36.nnpwg.cn
http://q7gb0VD5.nnpwg.cn
http://LPmEgJph.nnpwg.cn
http://QpDfOGPc.nnpwg.cn
http://GhcKN3zg.nnpwg.cn
http://l30SzoFE.nnpwg.cn
http://l58FkrBW.nnpwg.cn
http://myWe6q6c.nnpwg.cn
http://yGprAO83.nnpwg.cn
http://U276VpU4.nnpwg.cn
http://vnblTHlX.nnpwg.cn
http://CJtgRyNI.nnpwg.cn
http://g1ixYtrM.nnpwg.cn
http://eBKYPaS6.nnpwg.cn
http://Ft5WENNS.nnpwg.cn
http://EW9jl8oG.nnpwg.cn
http://xCyT6TSR.nnpwg.cn
http://M5eDGNcG.nnpwg.cn
http://tD4pfw7u.nnpwg.cn
http://WR49ptEj.nnpwg.cn
http://eo9HpjkZ.nnpwg.cn
http://4yFiMYn9.nnpwg.cn
http://RCPX6xTx.nnpwg.cn
http://mDNst2fF.nnpwg.cn
http://euGberNG.nnpwg.cn
http://PPLfngfZ.nnpwg.cn
http://p5b9joV4.nnpwg.cn
http://www.dtcms.com/a/128270.html

相关文章:

  • 颜色在线工具
  • 十九、UDP编程和IO多路复用
  • 基于vue框架的住院信息管理系统k08hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 使用pybind11开发c++扩展模块输出到控制台的中文信息显示乱码的问题
  • Unity Internal-DeferredShading 分析
  • 深入解析ACID原理:数据库事务的四大基石
  • MySQL面试题及答案,2025最新整理
  • C语言-文件操作
  • 基于NCP1207的准谐振脉宽调制电源设计(01)
  • JS里对于集合的简单介绍
  • CFS 调度器两种调度类型普通调度 和 组调度
  • 2025蓝桥杯python A组题解
  • spring常见注解
  • VMware Fusion Pro/Player 在 macOS 上的完整安装与使用指南
  • SAP GUI 显示SAP UI5应用,并实现SSO统一登陆
  • 华为hcie证书的有效期怎么判断?
  • 并发编程--条件量与死锁及其解决方案
  • Python及C++中的排序
  • 免费下载 | 2025清华五道口:“十五五”金融规划研究白皮书
  • [CF2086E] Zebra-like Numbers 题解
  • PHP多维数组
  • 对shell脚本敏感命令进行加密执行
  • PyTorch模型构造实战:从基础到复杂组合
  • 力扣刷题DAY12(动态规划-区间DP)
  • AUTO-RAG: AUTONOMOUS RETRIEVAL-AUGMENTED GENERATION FOR LARGE LANGUAGE MODELS
  • 用Java实现O(n)时间复杂度查找最长连续序列
  • 【特权FPGA】之SRAM读写
  • C语言--汉诺塔问题
  • 软考 系统架构设计师系列知识点之杂项集萃(50)
  • asm汇编源代码之按键处理相关函数