首页 > 编程语言 > 详细

马拉车算法(Manacher's Algorithm)

时间:2019-10-16 10:49:27      阅读:101      评论:0      收藏:0      [点我收藏+]
    public static void reserver(String s){
        StringBuffer sb=new StringBuffer();
        sb.append("$#");
        for (int i=0;i<s.length();i++){
            sb.append(s.charAt(i));
            sb.append('#');
        }
        char[] ca=sb.toString().toCharArray();
        int[] tag=new int[ca.length];
        int mid=0,right=0;
        int len=0,index=0;
        for (int i=1;i<ca.length;i++){
            tag[i]=i<right?Math.min(tag[2*mid-i],right-i):1;
            while (tag[i]+i<ca.length&&ca[tag[i]+i]==ca[i-tag[i]]){
                tag[i]++;
            }
            if (tag[i]+i>right){
                right=tag[i]+i;
                mid=i;
            }
            if (tag[i]>len){
                len=tag[i];
                index=i;
            }
        }
        System.out.println("最长回文子串:"+String.valueOf(s.toCharArray(),(index-len)/2,len-1));

   }

马拉车算法(Manacher's Algorithm)

原文:https://www.cnblogs.com/duangL/p/11684053.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!