zoukankan      html  css  js  c++  java
  • 【LeetCode】5. Longest Palindromic Substring 最大回文子串

    题目:

      Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

    思路:用Manacher算法得到最大回文子串的长度,得到带#的最大回文子串,用split剔除#后转化成String形式输出即可。

    public class Solution {
        public String longestPalindrome(String s) {
            if(s==null || s.length()==0){
                return null;
            }
            char[] charArr=manacherString(s);
            int[] pArr=new int[charArr.length];
            
            int index=-1;
            int center=-1;
            int pR=-1;
            int max=0;
            for(int i=0;i<charArr.length;i++){
                pArr[i]=pR>i?Math.min(pArr[2*index-i],pR-i):1;
                
                while(i+pArr[i]<charArr.length && i-pArr[i]>-1){
                    if(charArr[i+pArr[i]]==charArr[i-pArr[i]]){
                        pArr[i]++;
                    }else{
                        break;
                    }
                }
                if(i+pArr[i]>pR){
                    pR=i+pArr[i];
                    index=i;
                }
                
                if(pArr[i]-1>max){
                    max=pArr[i]-1;//得到最大回文子串的长度
                    center=i;
                }
            }
            //以string形式返回最大回文子串
             String str=new String(charArr);
             String[] strArr=str.substring(center-max,center+max).split("#");
             StringBuffer sb=new StringBuffer();
             for(int i=0;i<strArr.length;i++){
                 sb.append(strArr[i]);
             }
            return sb.toString();
        }
        
        public static char[] manacherString(String str){
            char[] charArr=str.toCharArray();
            char[] res=new char[2*str.length()+1];
            int index=0;
            for(int i=0;i!=res.length;i++){
                res[i]=(i&1)==0?'#':charArr[index++];
            }
            return res;
        }
    }
    

      

  • 相关阅读:
    【Ebola】python day4
    源代码管理SVN的使用
    源代码管理git的使用
    UIViewController的生命周期及iOS程序执行顺序
    iOS
    Quartz2D知识点聚合案例
    iOS之NSAttributedString-------字符属性
    iOS-控件响应用户控制事件之事件处理
    UINavigationController
    程序启动的完整过程
  • 原文地址:https://www.cnblogs.com/zhstudy/p/5994177.html
Copyright © 2011-2022 走看看