LeekCode解题记录
昨天晚上有个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解题记录的更多相关文章
- pwnable.kr input解题记录
pwnable input解题记录 给了源码如下: #include "stdio.h" #include "unistd.h" #include " ...
- angr脚本——以angrctf解题记录为参考
angr脚本--以angrctf解题记录为参考 angr是用于逆向工程中进行二进制分析的一个python框架 符号执行 (Symbolic Execution)是一种程序分析技术.其可以通过分 ...
- LeetCode解题记录(贪心算法)(二)
1. 前言 由于后面还有很多题型要写,贪心算法目前可能就到此为止了,上一篇博客的地址为 LeetCode解题记录(贪心算法)(一) 下面正式开始我们的刷题之旅 2. 贪心 763. 划分字母区间(中等 ...
- ssrf解题记录
ssrf解题记录 最近工作需要做一些Web的代码审计,而我Web方面还比较薄弱,决定通过一些ctf的题目打打审计基础,练练思维,在博客上准备开几个专题专门记录刷题的过程. pwn题最近做的也很少,也要 ...
- 实验吧web解题记录
自以为sql注入掌握的还是比较系统的,然而,做了这些题之后才发现,大千世界无奇不有,真是各种猥琐的思路...还是要多学习学习姿势跟上节奏 登录一下好吗?? http://ctf5.shiyanbar. ...
- LeetCode解题记录(贪心算法)(一)
1. 前言 目前得到一本不错的算法书籍,页数不多,挺符合我的需要,于是正好借这个机会来好好的系统的刷一下算法题,一来呢,是可以给部分同学提供解题思路,和一些自己的思考,二来呢,我也可以在需要复习的时候 ...
- Leetcode解题记录
尽量抽空刷LeetCode,持续更新 刷题记录在github上面,https://github.com/Zering/LeetCode 2016-09-05 300. Longest Increasi ...
- AC自动机解题记录
1.HDU 2222 Keywords Search 模板题 #include <bits/stdc++.h> #define fir first #define sec second # ...
- [LeetCode]Valid Sudoku解题记录
这道题考查对二维数组的处理,哈希表. 1.最自然的方法就是分别看每一个数是否符合三个规则.所以就须要对应的数据结构来 记录这些信息,判定是否存在.显然最先想到用哈希表. 2.学会把问题抽象成一个个的子 ...
随机推荐
- 为何需要apigee edge
http://apigee.com/docs/gateway-services/content/what-apigee-edge 越来越多的服务商在网上提供服务,通过各种标准的接口对来自手机.电脑.p ...
- python学习之旅1-2(基础知识)
三,python基础初识. 1.运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确定后 写入代码pytho ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- Direct12优化 第一章:向量代数 1.向量计算的时候,使用XMV ...
- Laravel 单设备登录
https://laravel-china.org/articles/10605/laravel-single-device-login 前几天在 laracasts 看了laravel5.6的新功能 ...
- Kubernetes1.4即将发布
(一)发布历史 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 Kubernetes ...
- docker+jenkins的实现方式(ps.使用dockerfile的方式)!
继http://www.cnblogs.com/guilty/p/4747993.html之后. 前两天朋友问的,docker+jenkins整合. 我也没搞过,但是正好最近有空,我也很有兴趣,就搞一 ...
- [已转移]IE事件流和DOM标准事件流的区别
该文章已转移到博客:https://cynthia0329.github.io/ 1.执行的顺序不一样 冒泡型事件模型: button->div->body (IE事件流) 捕获型事件模型 ...
- shell学习(18)- split切分文件命令
Linux split命令用于将一个文件分割成数个. 该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件. 语法: split [--help][--version][-& ...
- UVa 10285【搜索】
UVa 10285 哇,竟然没超时!看网上有人说是记忆化搜索,其实不太懂是啥...感觉我写的就是毫无优化的dfs暴力....... 建立一个坐标方向结构体数组,每个节点dfs()往下搜就好了. #in ...
- 三 nginx+uWSGI+django+virtualenv+supervisor发布web服务器
https://www.cnblogs.com/pyyu/p/9481344.html?tdsourcetag=s_pcqq_aiomsg 一 uwsgi安装 1.安装uwsgi,进入到一个虚拟机环境 ...