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.学会把问题抽象成一个个的子 ...
随机推荐
- 【JZOJ4803】【NOIP2016提高A组模拟9.28】求导
题目描述 输入 输出 样例输入 2x^2+3x+1 样例输出 4x+3 数据范围 样例解释 求导的意思: 多项式是由若干个单项式构成的 单项式的一般形式是ax^b,其中ab都是常数,x是自变量 对于单 ...
- 关于JSP的淘汰问题(转)
来源:http://1t.click/peD 大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开.你要是这辈子就吃java这碗饭,就不要去研究什么css,js等等. 把你的 ...
- Ubuntu18.04+windows10双系统时间同步教程
前言: 系统安装windows10和Ubuntu18.04双系统后会出现时间不同步的情况,往往windows系统的时间会有错误,一般会有8个小时的误差. 原因: 主要因为本地时间与硬件时间的时差: 本 ...
- Hdu 1729 Nim博弈
点击打开题目链接 之前没做过这题,因为学弟问到我如果来求该题的sg值,才做了这题. 首先, 是多堆Nim博弈毫无疑问,这题是往一个有固定容量的箱子里放石子,和从一堆石子里面拿出石子是一个道理. 和传统 ...
- assigned before calling save & JPA id生成策略
撸了今年阿里.网易和美团的面试,我有一个重要发现.......>>> Ⅰ 关于JPA 主键,自定义生成遇到的问题,愚蠢的笔记 Ⅱ 第一次 报错: ids for this class ...
- 解决eclipse不会自动弹出Console控制台的问题
有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行, 解决方案: windows -> preferences -> run/debug ...
- KiCad EDA 过孔是否可以开窗?
KiCad EDA 过孔是否可以开窗? 和传统的商业 EDA 不同,KiCad EDA 的过孔默认就是盖绿油. 在 KiCad 的过孔界面没有任何可以设置的地方,这也有一个好处,不过考虑过孔是否盖油. ...
- 集合 Enumerable Enumerator yield
集合: 通过索引来访问成员,--引申到索引器 的使用 for foreach循环遍历 --引申到 IEnumerable IEnumerator(会引申到yield) 常用的集合操作,add, ins ...
- 【转载】Ubuntu终端常用的快捷键
Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手.在Ubuntu中打开终端的快捷键是Ctrl+Alt+T.其他的一些常用的快捷键如下: 快捷键 功能 Ta ...
- 洛谷P1546 最短网络 Agri-Net(Prim堆优化)
#include<bits/stdc++.h> using namespace std; ; const int INF=0x3f3f3f3f; inline void read(int ...