zoukankan      html  css  js  c++  java
  • Manacher

     

     1 public class T05_02_Manacher {
     2 
     3     public String longestPalindrome(String s) {
     4         /***
     5          * Manacher 返回 字符串长度
     6          *
     7          */
     8         //1.将字符串处理成Manacher字符串
     9 
    10         //2.新建数组,记录相应位置的长度值,,,并且记录最右侧边缘,和对应的i
    11 
    12         //3.遍历字符串。判断此点是否在右侧边缘以内,若在边缘引内,
    13 
    14         char[] charArray = manacher(s);
    15         int[] pArray = new int[charArray.length];
    16         int pR = -1;
    17         int index = -1;
    18         int max = 0;
    19         for (int i = 0; i < charArray.length; i++) {
    20             pArray[i] = i < pR ? Math.min(pArray[2 * index - i], pR - i) : 1;
    21             while (i + pArray[i] < charArray.length && i - pArray[i] >= 0) {
    22                 if (charArray[i + pArray[i]] == charArray[i - pArray[i]]) {
    23                     pArray[i]++;
    24                 } else {
    25                     break;
    26                 }
    27             }
    28 
    29             if (pArray[i] + i > pR) {
    30                 pR = pArray[i] + i;
    31                 index = i;
    32             }
    33             max = Math.max(max, pArray[i]);
    34         }
    35         int maxIndex = 0;
    36         for (int i = 0; i < pArray.length; i++) {
    37             if (pArray[i] == max) {
    38                 maxIndex = i;
    39                 break;
    40             }
    41         }
    42         return s.substring((maxIndex - max + 2) / 2, (maxIndex - max + 2) / 2 + max - 1);
    43 
    44     }
    45 
    46     private char[] manacher(String s) {
    47         String str = "#";
    48         for (int i = 0; i < s.length(); i++) {
    49             str += s.charAt(i) + "#";
    50         }
    51         return str.toCharArray();
    52 
    53     }
    54 }

     

     

    一回生,二回熟
  • 相关阅读:
    BZOJ 3744 Gty的妹子序列
    BZOJ 3872 Ant colony
    BZOJ 1087 互不侵犯
    BZOJ 1070 修车
    BZOJ 2654 tree
    BZOJ 3243 向量内积
    1003 NOIP 模拟赛Day2 城市建设
    CF865D Buy Low Sell High
    CF444A DZY Loves Physics
    Luogu 4310 绝世好题
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12431836.html
Copyright © 2011-2022 走看看