怎么判断一个字符串的最长回文子串是否在头尾_【Leetcode每日打卡】最长回文串...

d5c40572-7513-eb11-8da9-e4434bdf6706.png

干货预警:所有文章都会首发于我的公众号【甜姨的奇妙冒险】,欢迎watch。

d6c40572-7513-eb11-8da9-e4434bdf6706.png

一、来历:

力扣从3月开始开启了每日一题打卡活动,于是跟风加入了打卡大军,这两天写评论、发题解,没想到反响还不错,收到了来自很多同学的鼓励与好评,短短几天就170的关注了,有的同学说每天都会蹲我的评论和题解哈哈 ,本来觉得wx公众号是比较私人的趣味(つд⊂),但不由萌生了在公众号开一个专栏写每日一题的想法,有啥问题或想法可以私信我,anytime。本文重点在第五部分细节说明。

二、原题描述:

d8c40572-7513-eb11-8da9-e4434bdf6706.png

三、题目分析:

这题是道简单的构造性题目,只需要尽可能的左右对称地构造字符串就行了。所以最终的回文串中所有的字符都左右对称地出现了偶数次(对于奇数长度的回文串,最中间的那个字符可以出现奇数次)。

比如偶数长度的回文串 “abba”,每个字符都出现了偶数次;

比如奇数长度的回文串“abcbcbcba”,c出现了奇数次,其它字符都出现了偶数次。

四、AC代码:

class 

再提供Java8的流式写法:

class 

五、细节说明(咳咳..划重点~~)

代码本身很简单,但有很多细节我觉得才是最重要的。【一脸认真哦 ξ( ✿>◡❛)

1. 计数为啥用数组?

counter计数是很常见的场景了,对于数据范围有限的计数,直接用数组就行了,看见很多同学用的HashMap,额外增加了hash的计算成本、链表(树)Node的创建开销等,在时间、空间上都不讨好哟。

2. 为啥counter数组的长度是58?

因为A~z的范围是'z' - 'A' + 1= 122 - 65 + 1 = 58,打印看看就知道了(但我觉得常见的几个ascii码记住的话日常会方便很多哟,比如'A'是65,'a'是97)。

3. x - (x & 1) 是什么意思?

合理的运用位运算可以让代码减少一些不必要的判断分支。

如果 x 是奇数,x & 1 的结果就是1,偶数就是0,实现了偶数不变、奇数减1的逻辑。当然这里还有另外一种位运算写法: (x >> 1) << 1 ,先右移一位去掉最末位的0或1,再左移一位,也实现了偶数不变、奇数减1的逻辑。

4. 这里为啥不写成x - x % 2?

取模是一个消耗较大的操作,因此大多数语言的编译器比如C++都对模运算进行了优化,比如可以将 x%2 优化成 x&1,这种情况下怎么写都一样啦。但是Java比较特殊,Java中是不存在无符号整型的,数字是用补码来表示的(大家还记得补码吧...最高位是符号位,0表示正数,1表示负数),所以对于负数来说,%2 与 &1 两个操作是完全不同的(如下):

int 

因此我觉得jvm很难对模运算进行优化(当然也有可能优化,比如先判断一下是不是正数,但我觉得这么麻烦的话,可能并没有优化 )总之,结论就是:能用 & 就不要取模。这里提一下一个常见的规律,对于模数是2的幂的情况下,都可以优化成&运算,如下:

int 

5. 流式写法看不懂?以及流式写法这里为啥慢?

s.chars()的返回值是一个 IntStream,就是Int的流;

.boxed()会装箱返回Stream<Integer>;

.collect()是聚合的算子,Collectors.toMap的三个参数分别是 keyMapper,valueMapper 和 mergeFunction。分别表示聚合出来的 Map 的 key 是什么,value 是什么,如果遇到key相同的,怎么合并值。

counter.values() 返回的是map值的集合Collection<Integer>,先用.stream()转成流以后,利用mapToInt 转成 IntStream,因为 IntStream 是支持 sum 算子的,通过sum算子进行求和。

最后,至于为啥这里流运算比传统循环慢,是因为对于小数据集无法发挥流的优势,这里只是为了介绍这种优雅的写法。

六、类似题目

Easy:

1. 判断是否是回文串(125. 验证回文串)

2. 判断是否是回文链表 (234. 回文链表)

3. 判断是否是回文数 (9. 回文数)

Medium:

4. 符串里有多少个回文子串(647. 回文子串)

5. 找到最长的回文子串(5. 最长回文子串)

关于 最长回文子串, 还有一个特定的算法叫做 Manacher算法,该算法巧妙地利用插入不存在的字符将回文串都转成奇数回文串,比如abba变成了#a#b#b#a#(字符串中心是#), abcba变成了#a#b#c#b#a#(字符串中心是c) ,有兴趣的同学可以去学习学习~


以上,蟹蟹宝宝们的观看~(๑ơ ₃ ơ)♥

恕我直言,在座的各位都是dalao!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET平台下WEB应用程序的部署(安装数据库和自动配置)

.NET平台下WEB应用程序的部署(安装数据库和自动配置)李洪根在.NET平台下&#xff0c;部署 Web 解决方案是比较方便的。我们可以利用Visual Studio.NET 2003添加一个WEB安装项目&#xff0c;在部署的“文件系统编辑器”中添加项目的主输出和内容文件&#xff0c;非常简易地完成安…

苹果原壁纸高清_全面屏壁纸高清 | 电影经典台词截图高清

iPhonex手机壁纸高清(苹果xs壁纸&#xff0c;苹果xr壁纸&#xff0c;iPhone11壁纸&#xff0c;安卓全屏壁纸)火影壁纸高清&#xff0c;经典电影台词截图拼接壁纸&#xff0c;电影《去他妈的世界》壁纸&#xff0c;欧美电影截图加上经典台词&#xff0c;2020好看的手机壁纸&…

python字符串切片用法_详解Python字符串切片

在python中,我们定义好一个字符串,如下所示。 在python中定义个字符串然后把它赋值给一个变量。 我们可以通过下标访问单个的字符,跟所有的语言一样,下标从0开始(==,我自己都觉得写的好脑残了) 这个时候呢,我们可以通过切片的方式来截取出我们定义的字符串的一部分。 使用…

azkaban config: nodes:_关于Nordic SDK的sdk.config.h

使用MDK对Nordic SDK开发&#xff0c;离不开sdk.config.h。请看以下两个视图&#xff1a;Text Editor视图Configuration Wiard视图咋一看挺神奇的&#xff0c;配置视图话&#xff0c;方便。具体实现和规则就不一一介绍了&#xff0c;网页搜“MDK中Configuration Wiard的使用”。…

SilverLight开发系列第1步:搭建开发环境

来自 http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html 在缺乏SilverLight中文教程的今天&#xff0c;新人要入门不容易&#xff0c;所以我根据自己阅读英文原档和实践经验&#xff0c;总结一个系列。首先介绍的是开发环境的搭建。 个人强烈推荐安装英文版的开发…

php使用smtp.sina.com邮箱发送邮件

2019独角兽企业重金招聘Python工程师标准>>> 需要写一个smtp发送类 <?php set_time_limit(120);class smtp {/* Public Variables */var $smtp_port;var $time_out;var $host_name;var $log_file;var $relay_host;var $debug;var $auth;var $user;var $pass;var…

java 不存在就创建_Java 判断多级路径是否存在,不存在就创建

Java 判断多级路径是否存在&#xff0c;不存在就创建方案一&#xff1a;(带文件名的Path&#xff1a;如&#xff1a;D:\news\2014\12\abc.text)public boolean isexitsPath(String path)throws InterruptedException{String [] pathspath.split("\\\\");StringBuffer…

asynchttpclient 超时_DNF:95更新前还能免费获得一件超时空装备?但这个任务一定完成...

现在距离95版本更新还有16天的时间&#xff0c;在前段时间体验服更新的内容中&#xff0c;相信玩家们已经对新版本了解的差不多了。最受玩家关注的就是装备升级方面的一些内容&#xff0c;都说95版本是一个土豪专属副本&#xff0c;但是小编并不那么认为&#xff01;从材料上来…

sqllite开发安卓项目_【兼职项目】预算3万开发无线温度电流传感,2万开发直流电机打磨机控制...

【个人/团队兼职项目】是小包为大家筛选的酬金预算≤3万元的中小型软硬件兼职项目&#xff0c;适合高级工程师、技术团队服务商竞标&#xff0c;从而赚取“零花钱”。个人/团队兼职项目&#xff08;酬金≤3万元&#xff09;1、摄像头在安卓开发板上成像项目预算&#xff1a;&am…

java还是c 2017_2017年9月编程语言排行榜:Java、C与C++三巨头还能统治排行榜多久?...

【51CTO.com快译】过去16年来(自2001年起)&#xff0c;TIOBE编程语言排行榜的三甲位置一直被Java、C与C长期占据。C#与Python虽然已经被广泛认定为下一世代的核心编程语言&#xff0c;但在人气方面却仍然未得到充分体现。C#之所以无法进军三甲&#xff0c;主要是因为其在非Wind…

excel换行按什么键_电脑结束任务按什么键

如今&#xff0c;电脑在我们日常生活中几乎无处不在&#xff0c;然而有时候可能我们在使用电脑的过程中会出现这样或者那样的小问题&#xff0c;比如有时候电脑打开的软件太多&#xff0c;导致电脑有点卡机&#xff0c;我们想要关闭一些程序却无法快速关闭&#xff0c;最常见的…

npoi 导入 winform excel_勤哲Excel服务器做影视制作企业管理系统 - 科技

在人们心中&#xff0c;影视作品的生产是一个系统化的工程&#xff0c;从剧本选择、班底选择&#xff0c;到拍摄和发行&#xff0c;每个环节的信息化和大数据应用&#xff0c;正在释放越来越大的能量。在行业专家们看来&#xff0c;曾经国内影视行业的工业化程度较低&#xff0…

关于 Android 和 iOS 流畅度的一切

2019独角兽企业重金招聘Python工程师标准>>> 之前发表了《论苹果公司的系统拖累策略》&#xff0c;在看了锋友的回复之后&#xff0c;发现无论大家是赞成或者反对&#xff0c;可能都对Android和iOS的认识上存在着一些盲区和误区&#xff0c;于是答应转载这篇专业分析…

Extjs4 MVC 添加view层

如果这不是您感兴趣或者需要学习的东西&#xff0c;何必点开呢&#xff1f;人生苦短。实例中我们通过view层望主界面中添加一个grid&#xff0c; 1、app.js改成如下&#xff1a; app.js 1 Ext.Loader.setConfig({enabled:true});//开启动态加载2 Ext.application({3 name: …

剪映电脑版_2020 年双十一要不要选一个平板电脑?

其实大路很久以前就一直在关注平板电脑&#xff0c;我记得前几年平板电脑有好多厂家都在做&#xff0c;比如小米的红米平板&#xff0c;1000元左右&#xff0c;性能像手机一样&#xff0c;非常香。华为也有很多&#xff0c;但是今年我突然想买的时候&#xff0c;尼玛停产的停产…

Qt之自定义搜索框

简述 关于搜索框&#xff0c;大家都经常接触。例如&#xff1a;浏览器搜索、Windows资源管理器搜索等。 当然&#xff0c;这些对于Qt实现来说毫无压力&#xff0c;只要思路清晰&#xff0c;分分钟搞定。 方案一&#xff1a;调用QLineEdit现有接口 void addAction(QAction * act…

跟我学Windows7的33个技巧(二)

18. 自定义电源开关 默认情况下&#xff0c;Windows 7在开始菜单处将以文本形式显示关机按钮&#xff0c;但是你只需要几秒钟就可以将这种默认的方式改变。如果每天你都需要重启电脑许多次&#xff0c;那么这样的改变比默认的方式更加有趣&#xff0c;右击开始菜单选择属性“Pr…

android gps 锁屏更新坐标_把手机锁屏设置成任意字体,悄悄给男(女)朋友一个惊喜吧...

有好软件就要与大家分享&#xff0c;我是阿喵&#xff0c;阿喵每天会定时推送出安卓手机、苹果手机、电脑相关、学习等优质软件&#xff0c;如果各位觉得软件不错&#xff0c;就请转发评论&#xff0c;留言需要什么样功能的&#xff0c;留言需要什么样功能的&#xff0c;阿喵定…

实验一:SQL server 2005高可用性之----日志传送

如转载&#xff0c;请注明出处&#xff1a;http://blog.csdn.net/robinson_0612/archive/2009/10/31/4751070.aspx SQL server 2005高可用性之日志传送是在SQL server 2000 日志传送基础之上的延续&#xff0c;两者其本质上并没有太大的差异。日志传送能够同步位于不同服务器或…

反向代理服务器

一 反向代理服务器简介      反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff1b;并将从服务器上得到的结果返回给Internet上请求连接的客户端&#xff0c;此时代…