【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;
}
}
【LeetCode】5. Longest Palindromic Substring 最大回文子串的更多相关文章
- 5. Longest Palindromic Substring最大回文子串
int sta = 0; int max = 1; public String longestPalindrome(String s) { /* 判断回文有两种: 1.最大回文子序列求长度: 用动态规 ...
- leetcode 5 Longest Palindromic Substring--最长回文字符串
问题描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- Longest Palindromic Substring-----最长回文子串
首先讲讲什么是回文, 看看Wiki是怎么说的:回文,亦称回环,是正读反读都能读通的句子.亦有将文字排列成圆圈者,是一种修辞方式和文字游戏.回环运用得当.能够表现两种事物或现象相互依靠或排斥的关系, 比 ...
- [leetcode]516. Longest Palindromic Subsequence最大回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法
LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...
- [LeetCode] 409. Longest Palindrome 最长回文
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- leetcode:Longest Palindromic Substring(求最大的回文字符串)
Question:Given a string S, find the longest palindromic substring in S. You may assume that the maxi ...
随机推荐
- [rootfs]Yaffs2
1. busybox: sudo apt-get install busybox(v1.21.1) 2. mkyaffs2image: http://www.aleph1.co.uk/gitweb/? ...
- TSP(旅行者问题)——动态规划详解(转)
1.问题定义 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 假设现在有四个城市,0,1,2,3,他们之间的代价如图一,可以存成 ...
- hibernate 大对象映射
1. 在pojo类中 用Blob类和Clob public class Student { private int id; private String name; private int age; ...
- OAF_VO系列4 - Row Imp的分析(概念)
20150706 Created By BaoXinjian
- bug_ _java.lang.IllegalArgumentException: View not attached to window manager
============= 1 view not attached to window manager 转自:http://hi.baidu.com/spare_h/blog/item/7fa3e ...
- linux下安装easy_install的方法
python中的easy_install工具,类似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan,那是相当的爽歪歪了如果想使用 如果想使用easy_install工具,可能需要 ...
- lable标签透明
方法1: pictureBox1.Controls.Add(lable1); //或 this.label1.Parent=pictureBox1; lable1.BackColor=Col ...
- Notepad++隐藏的用法
Notepad++是一个非常强大的文本编辑器. 它里面有很多有用的插件. 我认为对我比较有帮助的一个是NppExporter.它可以将Notepad++中彩色的代码原样的复制到Word中. 想要获得彩 ...
- Java线程新特性--- Lock
在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks包下面,里面有三个重要的接口C ...
- 第10章 Posix 信号量
10.1 概述 10.1.1 信号量类型 Posix有名信号量:使用Posix IPC名字,可用于进程或线程间同步: Posix基于内存的信号量:也叫做无名信号量,存放在共享内存中,可用于进程或线程间 ...