/** * @param {string} s * @return {string} */ var longestPalindrome = function (s) { if (s.length < 2) return s; // 判断字符串是否为回文字符串 functionisPalindrome(str, i, j) { while (i < j) { if (str[i] !== str[j]) { returnfalse; } else { i++; j--; } } returntrue; }
let max = 0; // 当前最长回文子串的长度 let start = 0; let end = 0; // 双重循环求全部子串 for (let i = 0; i < s.length - 1; i++) { for (let j = i + 1; j < s.length; j++) { // 注意这里要先判断长度大于 max 再进行 isPalindrome 的判断,可以大大减少计算量 if (j + 1 - i > max && isPalindrome(s, i, j)) { start = i; end = j; max = j + 1 - i; } } } // substring 截取数组下标开始位置和结束位置(不包含结束位置) return s.substring(start, end + 1); };