leetcode5-最长回文子串
原题链接: 题目描述:从字符串s中找到最长的回文子串,并返回这个子串 思路: 两种情况 一种是回文子串长度为奇数(如aba,中心是b) 另一种回文子串长度为偶数(如abba,中心是b,b) 循环遍历字符串 对取到的每个值 都假设他可能成为最后的中心进行判断 遍历字符串s,以当前元素为回文的中间元素往两边找,找的过程中分两种情况假设子串是偶数的时候 找以当前元素和下一个元素为中间往两边;假设是奇数时候 找以当前元素为中间的两边,直到字符串s遍历结束
/** * 遍历:总是以当前这个元素为回文的中间元素,往两边找 * @param {string} s * @return {string} */ var longestPalindrome = function (s) { // 边界条件 let len = s.length if (len < 2) return s let res = let getPalindrome = (left, right) => { while (left >= 0 && right < len && s[left] === s[right]) { left-- right++ } // 当left和right不相等的时候跳出循环,所以回文子串的位置为left+1 ,和right-1中间的字符 if (right - left - 1 > res.length) { //注意点: 取长度的时候是right-1 和left+1 之间的长度 res = s.slice(left + 1, right)//slice取值左闭右开 } } for (let i = 0; i < len; i++) { //回文长度是奇数 getPalindrome(i, i) //回文长度是偶数 getPalindrome(i, i + 1) } return res }; let s = asvvs s = "cbbd" console.log(longestPalindrome(s))
小知识点: 数组和字符串的slice使用 s.slice(left,right) 取字符串s的从left到right-1位置上的元素,位置从0开始。参数可以取负值 -1代表最后一个元素(也就是从后往前遍历时候的第一个元素),-2代表倒数第二个元素
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~