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.学会把问题抽象成一个个的子 ...
随机推荐
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...
- oracle如何看审计的结果
1)数据库初始化参数文件中AUDIT_TRAIL=OS时,审计记录存在操作系统的文件中. UNIX系统的话,默认存在“$oracle_home/rdbms/audit/” 目录下. If you ha ...
- Effective Modern C++:05右值引用、移动语义和完美转发
移动语义使得编译器得以使用成本较低的移动操作,来代替成本较高的复制操作:完美转发使得人们可以撰写接收任意实参的函数模板,并将其转发到目标函数,目标函数会接收到与转发函数所接收到的完全相同的实参.右值引 ...
- 2017校赛 C: 不爱学习的小W【模拟】
题目描述 “叮铃铃”上课了,同学们都及时到了教室坐到了座位上,教室里有n行m列的座位而且刚好坐满.既然是上课,那老师叫学生回答问题就是再正常不过的事了,同样地,教室里也就有爱学习和不爱学习的学生了,爱 ...
- IDEA切换git分支
查看当前所在分支 场景:在多人开发中,需要在主分支的基础上创建一些分支分配给小团队或个人去开发,然后小分支上的小功能开发完毕之后,再merge(合并)到主分支. 1.查看当前所在的分支 下图1.1中是 ...
- [转]The Curse of Dimensionality(维数灾难)
原文章地址:维度灾难 - 柳枫的文章 - 知乎 https://zhuanlan.zhihu.com/p/27488363 对于大多数数据,在一维空间或者说是低维空间都是很难完全分割的,但是在高纬空间 ...
- 《mysql必知必会》笔记3(插入、更新、删除、创建删除更新表、视图)
十九:插入数据 1:insert语句用来将行插入数据表中,可以插入完整的行.行的一部分.插入多行.插入某些查询的结果. 2:不指定列名,可以这样插入: insert into customers va ...
- js原生复习2.0
// 1.闭包的作用// 实现共有变量,函数累加器的实现// 可以做缓存以及储存结构// 可以实现封装,实现属性私有化// 模块开发,防止全局污染// var name = 123;// var in ...
- 瑞星推国内唯一Linux系统杀毒软件 国产操作系统还需国产安全软件保护
近来在IT领域最爆炸的新闻莫过于5月20日中央国家机关政府採购中心下发通知.要求中央机关採购所有计算机类产品不同意安装Windows 8.而改用国产Linux操作系统. 此消息一出,立马引起各界关注. ...
- hdu 4629 Burning (扫描线)
Problem - 4629 以前写过PSLG模拟的版本,今天写了一下扫描线做这题. 其实这题可以用set存线段来做,类似于判断直线交的做法.不过实现起来有点麻烦,于是我就直接暴力求交点了. 代码如下 ...