昨天晚上有个LeekCode的比赛,两个半小时解五题,轻松解决前两题后,卡在第三题,还剩半小时时放弃,开始解第五题,解完但未验证通过,第四题只看了下题目。
排名第一的大佬只用了36分钟全部写完。
差距很大,只能一点一点的向大佬靠近。

LeekCode---5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

解题思路:这题的解法有好几种,我说一下我自己解这道题的思路(中心扩展)。首先,回文分为三类:1:'baab';2:'bab';3:'a'。然后,很明显的可以发现,回文是从中心对称的(前两种好理解,第三种只出现在类似'abcd'这种字段中,每一个字符都可以看做一个回文,就取第一个字符作为他的回文)。我们遍历这个字段,将每一个字符作为回文的中心,分别去比较第一种和第二种情况:第一种回文的长度为偶数,因为遍历了,所以我们只去比较当前位置和他前面的字符是否相统,如果相同,再继续比较其前后字符是否相同;第二种回文的长度为奇数,计算其长度时需要先加上自身的长度,再依次比较其前后字符是否相同。当出现多个重复字符时会同时满足两种情况(如‘baaab’),所以每一个字符都同时需要执行奇偶数两种情况,然后取length大的。

var longestPalindrome = function(s) {
    if(s.length<2){
        return s;
    }
    let length=0;
    let string='';
    for(let i=1;i<s.length;i++){
        let oddLength=1,evenLength=0;
        let oddStr='',evenStr='';
        for(let j=1;j<=i;j++){
            if(s[i-j]===s[i+j-1]){
                evenLength+=2;
                evenStr=s.substr(i-j,evenLength);
            }else{
                j=i;
            }
        }
        for(let j=1;j<=i;j++){
            if(s[i-j]===s[i+j]){
                oddLength+=2;
                oddStr=s.substr(i-j,oddLength);
            }else{
                j=i;
            }
        }
        string=Math.max(length,evenLength,oddLength)===evenLength?evenStr:Math.max(length,evenLength,oddLength)===oddLength?oddStr:string
        length=Math.max(length,evenLength,oddLength)
    }
    return length===1?s[1]:string;//全为单字符时,取第一个字符
};

这道题官方提供了很多的解法,字符串取反的方式我也考虑过,因为这个最节省时间,但是怎么截取字符串进行比较我尝试了很多次,最后放弃了。至于暴力破解,就是遍历出所有可能存在的字符串,然后在判断是否是回文,这个我觉得很蠢,而且我觉得从中心扩展其实从某种意义上来说就已经算是一种暴力破解了,没有必要先把字符串全部列举出来再去比较。动态规划算法我还不是太熟悉,暂时还看不太懂,等以后能看懂了再回过头来补充吧。还有一个Manacher算法,据说很牛逼,我要先去研究一下,也之后再回来补。

LeekCode解题记录的更多相关文章

  1. pwnable.kr input解题记录

    pwnable input解题记录 给了源码如下: #include "stdio.h" #include "unistd.h" #include " ...

  2. angr脚本——以angrctf解题记录为参考

    angr脚本--以angrctf解题记录为参考 ​ angr是用于逆向工程中进行二进制分析的一个python框架 ​ 符号执行 (Symbolic Execution)是一种程序分析技术.其可以通过分 ...

  3. LeetCode解题记录(贪心算法)(二)

    1. 前言 由于后面还有很多题型要写,贪心算法目前可能就到此为止了,上一篇博客的地址为 LeetCode解题记录(贪心算法)(一) 下面正式开始我们的刷题之旅 2. 贪心 763. 划分字母区间(中等 ...

  4. ssrf解题记录

    ssrf解题记录 最近工作需要做一些Web的代码审计,而我Web方面还比较薄弱,决定通过一些ctf的题目打打审计基础,练练思维,在博客上准备开几个专题专门记录刷题的过程. pwn题最近做的也很少,也要 ...

  5. 实验吧web解题记录

    自以为sql注入掌握的还是比较系统的,然而,做了这些题之后才发现,大千世界无奇不有,真是各种猥琐的思路...还是要多学习学习姿势跟上节奏 登录一下好吗?? http://ctf5.shiyanbar. ...

  6. LeetCode解题记录(贪心算法)(一)

    1. 前言 目前得到一本不错的算法书籍,页数不多,挺符合我的需要,于是正好借这个机会来好好的系统的刷一下算法题,一来呢,是可以给部分同学提供解题思路,和一些自己的思考,二来呢,我也可以在需要复习的时候 ...

  7. Leetcode解题记录

    尽量抽空刷LeetCode,持续更新 刷题记录在github上面,https://github.com/Zering/LeetCode 2016-09-05 300. Longest Increasi ...

  8. AC自动机解题记录

    1.HDU 2222 Keywords Search 模板题 #include <bits/stdc++.h> #define fir first #define sec second # ...

  9. [LeetCode]Valid Sudoku解题记录

    这道题考查对二维数组的处理,哈希表. 1.最自然的方法就是分别看每一个数是否符合三个规则.所以就须要对应的数据结构来 记录这些信息,判定是否存在.显然最先想到用哈希表. 2.学会把问题抽象成一个个的子 ...

随机推荐

  1. 高速求幂 POW优化

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/27633731 #include <io ...

  2. Directx11教程(13) D3D11管线(1)

    原文:Directx11教程(13) D3D11管线(1)       从本篇教程开始,我们暂停代码的学习,先来了解一下D3D11的管线,这些管线不涉及具体的硬件,而是着重于理解能够支持D3D11的管 ...

  3. java方法重写规则 重载

    方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型必须完全与被重写方法的返回类型相同: 访问权限不能比父类中被重写的方法的访问权限更低.例如:如果父类的一个方法被声明为public,那么在 ...

  4. (译)Objective-C的动态特性

    这是一篇译文,原文在此,上一篇文章就是受这篇文章启发,这次干脆都翻译过来. 过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型 ...

  5. 关于Apple Watch,听听开发了两个月Watch App的工程师怎么说

    今年1月份有幸应苹果邀请,秘密参与苹果 Watch App 的真机现场调试.4月份,Apple Watch 会正式上市.在这之前,也算是亲自抢先体验了 Apple Watch,以及开发了一下 Watc ...

  6. python 使用异常代替返回状态码

  7. MUI - 为textarea添加语音输入和清除的功能

    为textarea添加语音输入和清除的功能 mui支持input输入框语音输入和清除的功能,只需要添加相关css类即可. http://www.cnblogs.com/phillyx/ 代码如下 &l ...

  8. Atcoder Tenka1 Programmer Contest D: IntegerotS 【思维题,位运算】

    http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_d 给定N,K和A1...AN,B1...BN,选取若干个Ai使它们的或运算值小于等于K ...

  9. C++ 求向量的交集、并集、差集

    #include<iostream> #include<stdio.h> #include<list> #include<algorithm> //se ...

  10. 在springmvc中 @RequestMapping(value={"", "/"})是什么意思

    这个意思是说请求路径 可以为空或者/ 我给你举个例子:比如百度知道的个人中心 访问路径是 http://zhidao.baidu.com/ihome,当然你也可以通过 http://zhidao.ba ...