问题描述:
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
解法:
/**
* @param {string} s
* @return {string}
*/
//开辟二维数组
const initialize2DArray = (w, h, val = null) =>
Array(h)
.fill()
.map(() => Array(w).fill(val));
var longestPalindrome = function(str){
var len = str.length;
if(len < 2){
return str;
}
//记录最长子串长度和开始位置
var maxLen = 1;
var begin = 0;
var dp = initialize2DArray(len,len,null);
for(var i=0;i<len;i++){
dp[i][i] = true;
}
for(var j=1;j<len;j++){
for(var i=0;i<j;i++){
if(str[i] != str[j]){
dp[i][j] = false;
}else{
if(j-i<3){
dp[i][j] = true;
}else{
// 两端值相等,其子串是回文,则其也是回文
dp[i][j] = dp[i+1][j-1];
}
}
if(dp[i][j] && j-i+1 >maxLen){
maxLen = j - i + 1;
begin = i;
}
}
console.log(maxLen, begin)
}
return str.substring(begin, begin + maxLen);
}