题目描述:
难度:Middle
相关话题:字符串
、动态规划
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
思路:
对于每一个str[i]
,都去检查它作为回文的中心的回文长度,
例如 ababcba
,
索引1
的b
作为中心,那么对应的回文就是aba
,
索引2
作为中心,对应的回文就是bab
,
索引4
作为中心,对应的回文就是abcba
。
注意的是,回文有2种,ababa
,以a
为中心,abba
,以bb
为中心,因此对于每一个索引,都要计算2种形成回文的方式,最后选择最长的。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(str) {
let max=0
let maxStr=''
function check(lo,hi){
let count=0,s=''
while(lo>=0 && hi<str.length && str[lo]===str[hi]){
count+=2
lo--
hi++
}
s=str.slice(lo+1,hi)
return [count,s]
}
for(let i=0;i<str.length;i++){
let [c1,s1]=check(i,i),
[c2,s2]=check(i,i+1)
c1--
if(c1>max){
max=c1
maxStr=s1
}
if(c2>max){
max=c2
maxStr=s2
}
}
return maxStr
};
扩展阅读: