解题思路
题目分析
原题截图
观察回文可以发现只要回文的长度>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是回文的起始下标