给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
思路:
-
首先知晓回文串的判断:
length1, return true;
length2, 字符相等就是回文
length>2, 收文字符相等, 并且去掉收文字符后还是回文字符串, 那么就是回文。 -
利用[i][j]的二维数组, 来存时字符串的substring(i, j+1)字符串是否为回文串
-
为了让length>2的情况, 都从二维数组中找到去掉首尾字符串之后, 是否是回文串, 我们用数组长度当断第一次遍历的依据。 即第一次遍历的结果是长度为1的子串, 等二次为所有长度为2的子串, 依次。
var longestPalindrome = function(s) {
var length = s.length;
var dic = [];
var max = 0;
var maxStr = '';
for (var i=1; i<=length; i++) {
for (var j=0; j<=length - i; j++) {
if (i===1) {
dic[j] = [];
}
dic[j][j+i-1] = isPalindrome(j, j+i-1, dic, s);
if (dic[j][j+i-1] === true)
if (max < i) {
max = i;
maxStr = s.substring(j, j+i);
}
}
}
return maxStr;
};
// j肯定>=i
function isPalindrome(i, j , dic, str) {
var length = j - i;
if (length === 0) {
return true;
}
if (length === 1) {
return str.charAt(i) === str.charAt(j);
}
if (str.length > 1) {
return str.charAt(i) === str.charAt(j) && dic[i+1][j-1]=== true;
}
return false;
}