给你一个字符串 s,找到 s 中最长的回文子串。
什么是回文?直白点说就是一句话正着读和反着读都一样,
eg: 斗鸡山上山鸡斗;龙隐洞中洞隐龙
回到本题:寻找字符串s中的最长的回文子串
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
let start = 0; //回文子串开始位置
let end = 0; //回文子串结束位置
let len = end - start //找到的回文子串的长度,用来比较,找到最长的那一个
for(let i = 0; i < s.length;i++)
{
if(len > s.length - i) //找到的回文子串长度已经大于剩下待循环的字符长度,就没有必要找下去了
{
break;
}
let a = s.charAt(i) //当前字符
let index = s.lastIndexOf(a) //找到与当前字符相同的字符最靠后的位置
for(let j = index;j > i;j--) //从两个相同的字符最长的开始找回文字符,递减
{
let b = s.charAt(j)
if(a == b) //两头的相等才有可能是回文字符,不相等直接略过,节省运算开销
{
let word = s.substring(i,j +1) //正着读
let word2 = word.split('').reverse().join('') //反着读
if(word == word2 && j - i > len) //判断是否回文子串并且大于已找到的回文子串长度
{
start = i
end = j
len = end - start
break;
}
}
}
}
return s.substring(start,end + 1) //截取最长回文子串
};