马拉车算法(易理解版)

100 篇文章 0 订阅
88 篇文章 0 订阅

 注:

学长的代码,自己学manacher没学明白,看了看学长的代码,发现简单易懂,但是因为没理解原版manacher,所以看不出区别。如果有哪位大神看出来了。麻烦解释解释

 

#include<stdio.h>   
char qdu[100050];   
int manacher()      
{                   
    int i;          
    int res = 0;    
    for(i = 1;qdu[i];i++)
    {               
        int l = i;  
        int r = i;  
        while(qdu[i] == qdu[r+1]) //以中心扩展,如果中心值abbba相等,那么当判断到第一个b的时候可以拓展到第三个b
            r++;    
            i = r;                  
        while(qdu[l-1] == qdu[r+1]) //向两侧扩展,找最大。
            {                       
             r++;
             l--;
            }           
        if(res < r-l+1) //更新最大值
            res = r-l+1;
    }
    return res;
}
int main()
{
        int loop;
        qdu[0] = '$';
        gets(qdu+1);
        printf("%d\n",manachar());

    return 0;
}

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值