leetcode5-最长回文子串

原题链接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代表倒数第二个元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值