leecode第五题(最长回文子串)

news/2024/7/6 6:31:58

class Solution {
public:
    string longestPalindrome(string s) {

        int len = s.length();
        if (len == 0 || len == 1)
            return s;

        int index = 0, max_num = 1;

        for (int i = 1; i < len; i++)//检测奇数上的左右是否相同,例如aba,以b为中心
        {
            int t = i - 1, tt = i + 1, cur_num = 0;
            while (t >= 0 && tt < len && s[t] == s[tt])//我之前把s[t] == s[tt]放开始判断,但是遇到t=-1会报错,为了解决,先判断t》=0
            {
                cur_num = tt - t + 1;
                if (cur_num > max_num)
                {
                    index = t;
                    max_num = cur_num;
                }
                t--;
                tt++;
            }
        }

        for (int i = 0; i < len; i++)//检测偶数位上的左右是否相同,例如baab,以aa开始扩展
        {
            int t = i, tt = i + 1, cur_num = 0;
            while (t >= 0 && tt < len && s[t] == s[tt])
            {
                cur_num = tt - t + 1;
                if (cur_num > max_num)
                {
                    index = t;
                    max_num = cur_num;
                }
                t--;
                tt++;
            }
        }

        return s.substr(index, max_num);

    }
};

 

分析:

开始时候想到的是另一种动态规划法:开始时从头遍历每个字符,在每个字符开始时,设置一个尾指针从尾到头遍历,若二者相同,就判断这俩内部是不回文(写个小循环即可)。这个虽然写了三个循环,但是循环条件可以加上“当前两个指针距离大不大于最大的回文子串长度”,若小于,即便是回文也没必要判断了,这样一来虽然时间复杂度一样,但是节省很多啊,不过运行提醒我stack不足。。一开始我以为我想错了要不就是三个循环炸了,就看了题解的思想写成这个,但是后来我想应该是写错了,因为好像是s[t] == s[tt]放开始判断引起的问题(leecode的error提示真扯淡,和vs不一样),尴尬。

转载于:https://www.cnblogs.com/CJT-blog/p/10571657.html


http://www.niftyadmin.cn/n/4556245.html

相关文章

求C#关于线程池的简单例子

ArticleID21459 ArticleID7106Web中使用多线程来增强用户体验http://www.dezai.cn/article_show.asp ArticleID24745线程处理教程该文章转载自德仔工作室&#xff1a;http://www.dezai.cn/article_show.asp 线程异步调用该文章转载自德仔工作室&#xff1a;http://www.dezai.cn…

性能测试之二八原则

二八原则&#xff1a;80%的业务量在20%的时间内完成 某个网站高峰时间为下午1点到2点&#xff0c;人数达到360000人&#xff1b; 业务量360000&#xff1b; 时间&#xff1a;60*60s&#xff1b; 最大tps&#xff1a;360000*0.8 / 60*60*0.240 转载于:https://www.cnblogs.com/y…

C盤格式化會咋樣

不能 格式化了 系统崩溃 但是可以重新装系统 ||| 不能~除非你装两个系统~然后在另一个系统里格式话这个盘~或者在DOS情况下~

[Objective-C语言教程]多态(26)

多态性这个词表示有许多形式。 通常&#xff0c;当存在类的层次结构并且通过继承相关时&#xff0c;会发生多态性。 Objective-C多态表示对成员函数的调用将导致执行不同的函数&#xff0c;具体取决于调用该函数的对象的类型。 考虑下面一个例子&#xff0c;有一个基类Shape类&…

自学有什么好方法学习C和C++

要熟记各种库函数和语法结构&#xff1b;多用c的类 另外多交流讨论也是必不可少的 引用等练习程序编写尽量一题多解&#xff1b;不忘考虑运行效率 指针 函数重载 模板 程序语言学习最重要的就是练习 ||| 先学C~有耐心~学好了C~理解C就简单了~不过做C的高手不容易~ 总结方法技巧…

天下武功唯快不破--速度要快

进入题目链接&#xff0c;查看源代码后看到了 意思就是利用POST方法快速提交呗&#xff0c;F12&#xff0c;看一下Response,看到了BASE64编码过的FLAG字段&#xff0c;刷新一次都会改变headers FLAG里的内容&#xff0c;所以要提交快噢 因此写个PY脚本来POST提交&#xff0c;得…

速度 我们要 交 急急急 谁会用 VC#编写一个计算其、器和一个计时器

呵呵 看不懂问我啊 刚刚我搞玩了 顺便 发 给 你咯 到邮箱去看看 了 是 用 VC#写的 但是不知道你看不看的懂

不是C++ C语言

建议你自己动手 建议你还是要自己练习一下. min);getch();} 答案补充 这三题都是平时C语言的作业 max minx; if (y>x) maxy; if (y<x) miny; if (z>max) maxz; if (z<min) minz; if (a>max) maxa; if (a<min) mina; if (b>max) maxb; if (b<min) minb;…