题目描述:
给你一个字符串 s
,找到 s
中最长的回文子串。
解题思路:
该题目是找回文字串,应该有很多人看到回文串的第一想法就是类似 abcba 这种字符串,但往往会忽略 aa 、bbbb 这种偶数长度的字符串(不会真只有我这样吧 不会吧不会吧)。所以我们首先需要考虑的是回文串中心(即回文串最中间的字符,暂且这样称呼)是否为形如 aa 这样的连续相同字符。
具体做法是遍历字符串的每个字符并一直往前找与它相同的字符,即找到当前字符所在的字串的最长相同字串,如遍历 aaabb 第一个 a时,先找到 aaa ,然后再以最长相同字串为中心用双指针同时往两边移动,判断两指针指向字符是否相同,直到两指针指向字符不相同为止(注意边界条件)。最后判断该回文子串的长度是否临时答案的长度即可。
小优化点:每次遍历下一个字符,可以从此次循环找到的最长相同字串的下一个字符开始,例如 aaabb 遍历第一个 a 后下一次遍历的应该是第一个 b ,因为其余几个 a 能找到的最长回文字串必定相同(实测快了不少)。
完整代码:
/**
* @param {stri