leetcode05- Longest Palindromic Substring之Java版本

Posted 伊豚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode05- Longest Palindromic Substring之Java版本相关的知识,希望对你有一定的参考价值。

我的leetcode之旅,该篇章主要完成使用Java实现算法。这是第5篇 Longest Palindromic Substring


全部代码下载:Github链接:github链接,点击惊喜;写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;

1.题目简介:

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.

2.我的思路:

1.最长回文字符串解法
2.一看到最长回文字符串我就想到了Manacher算法
3.算法思想:请见http://blog.sina.com.cn/s/blog_3fe961ae0101iwc2.html

3.我的AC代码

package com.rlovep.string;
/**
 * Longest Palindromic Substring
 * 我的思路:
 * 1.最长回文字符串解法
 * 一看到最长回文字符串我就想到了Manacher算法
 * 算法思想:请见我转载的博文
 * @author peace
 *
 */
public class PalindromicSubstring {
     public String longestPalindrome(String input) {
            int pos=0;//最右回文子串的中心位置
                int maxRight=0;//最右回文子串的最右端位置
                int maxLength=0;//字符串最大的回文长度
                int finpos=0;
                int finMaxRight=0;
                //添加分隔符
                StringBuilder sb=new StringBuilder();
                sb.append("#");
                for(int i=0;i<input.length();i++){
                    sb.append(input.charAt(i));
                    sb.append("#");
                }
                //获得字符串数组
                input=sb.toString();
                char[] s= input.toCharArray();
                int rl[] =new int[s.length];//存储每个位置的最大回文子串半径
                for(int i=0;i<s.length;i++){
                    if(i<maxRight){
                        rl[i]=Math.min(rl[2*pos-i], maxRight-i);//核心代码    
                    }
                    else{
                        rl[i]=1;
                    }
                    while((i-rl[i])>=0&&//不能超过左端
                          (i+rl[i])<s.length&&//不能超过右端
                          (s[i-rl[i]]==s[i+rl[i]]))
                    {
                        rl[i]+=1;
                    }
                    //更新最右回文子串的最右端位置
                    if((i+rl[i]-1)>maxRight){
                        pos=i;
                        maxRight=i+rl[i]-1;
                    }
                    if(rl[i]>maxLength){
                        finpos=i;
                        finMaxRight=maxRight;
                        maxLength=rl[i];
                    }
                }
            input=input.substring(finpos+1-maxLength,finMaxRight);
            return input.replace("#", "");
        }
}

好的本章介绍到这里 来自伊豚wpeace(blog.wpeace.cn)

以上是关于leetcode05- Longest Palindromic Substring之Java版本的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Longest Palindrome

leetcode:longest words

Leetcode409. Longest Palindrome

leetcode:longest-increasing

[Leetcode]Longest Palindromic Substring

leetcode longest consecutive sequence