• 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 }

     

     

    一回生,二回熟
  • 相关阅读:
    [背包]JZOJ 3232 【佛山市选2013】排列
    内核空间、用户空间、虚拟地址
    进程与线程的概念
    Python中字符串颜色
    socket编程
    模块与包
    常用模块
    面向对象进阶
    面向对象编程
    函数式编程
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12431836.html
Copyright © 2020-2023  润新知