最长回文字串

最长回文字串
  • 这个算法题也是比较的有意思,题意就是求出一个字符串的最长回文子串,应该有很多种方法,我分享一下我的算法
  • 算法思路
  • 回文有两种形式,一种是lol,一种是lool,前者是单核,后者是双核
  • 以下是算法步骤:
  • 第一步:创建一个索引变量cen来遍历整个字符串,还有一个辅助的变量ocen=cen+1,作用就是判断是单核还是双核,如果 str[cen] === str[ocen],那就是双核,否则就是单核
  • 第二步:安排两个指针i,j以cen(单核的话)为中心或者以 cen,ocen(双核的话)为中心,来逐个遍历两边的字符是不是相同的,如果相同接着遍历,如果不相同,cen会指向下一个索引,知道cen遍历完整个字符串
// 最长回文子串
// 回文有两种情况:1.lol 2.lool
function getHuiWenByStr(str){
    var cen = 0,ocen = 0
    var i = 0,j = 0
    var cache = []
    var len = str.length
    for(;cen<len;cen++){
        i++
        j++
        ocen = cen+1
        // oo
        if(str[ocen] === str[cen]){
            cache.push(str.slice(cen,ocen+1))
        }
        if(i>cen){
            i=0
            j=0
            continue
        }
        if(j>len-ocen){
            i=0
            j=0
            continue
        }
        // lool,进入双核判断
        if(str[ocen] === str[cen]){
            while(str[cen-i] === str[ocen+j]){
                i++
                j++
            }
            if(i > 1 && j > 1){
                cache.push(str.slice(cen-i+1,ocen+j))
            }
            i=0
            j=0
            continue
        }
        // lol 单核模式
        while(str[cen-i] === str[cen+j]){
            i++
            j++
        }
        if(i > 1 && j > 1){
            cache.push(str.slice(cen-i+1,cen+j))
        }
        i=0
        j=0
    }
    return cache.sort((a,b)=>b.length-a.length)[0]
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值