leet-code 求字符串的最长回文 -- JavaScript

解题思路

题目分析

在这里插入图片描述 原题截图
观察回文可以发现只要回文的长度>1 则存在s[start] === s[finish]
也就是说我们只需要两个相同字符之间是不是满足回文的条件。
所以我的解题思路就是变量s字符串生成一个obj,字符串的每个字符作为obj的key,value则是出现的下标组成的数组。
以字符串 ‘ababababa’为例,遍历完之后我们可以得到一个下面的对象

obj = {
	a : [0,2,4,6,8],
	b :[1,3,5,7]
}

所以在判断我们只需要在出现重复的位置进行判断看看中间夹着的是不是回文。
然后就可以发现以下的两个规律

1 两个相同字符的长度相差小于3的时候一定会是回文

例如 aa , aba ;

2 如果要确定一个字符串是不是回文,只需要确定start+1,和finish-1 是不是回文

例如 ‘ababababa’ 我只要找到最大的回文,在对s字符串遍历的时候在0~2的位置我们可以得到第一个回文aba , 在1 ~ 3 的时候可以得到bab ,当下标遍历到4 的时候要确定0 ~ 4 是不是回文我们只需要判断 一下1 ~ 3 的字符串就可以了依次类推,最终在确定0 ~ 8 的时候 只需要判断 1 ~ 7 是不是回文。
所以我用一个对象reallyPdm来存储已经验证过的回文,reallyPam的key是回文的起始下标࿰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值