package leetCode;
/*
* 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
*/
public class Question5 {
public String longestPalindrome(String s) {
//每个字符与每个字符之间加上一个特殊字符
StringBuffer sBuffer=new StringBuffer();
sBuffer.append('$');
for(int i=0;i<s.length();i++) {
sBuffer.append(s.charAt(i));
sBuffer.append('$');
}
String string =sBuffer.toString();
// System.out.println(string);
int store[]=new int[string.length()];
store[0]=store[string.length()-1]=1;
for(int i=1;i<string.length()-1;i++) {
int temp=1;
//for循环保证了向前索引不超过数组限界
for(int j=i-1;j>=0;j--) {
//if判断保证了向后索引不超过数组限界
if(2*i-j<string.length()) {
if(string.charAt(j)==string.charAt(i+i-j)) {
// System.out.println(string.charAt(j)+"="+string.charAt(i)+"="+string.charAt(i+i-j));
temp+=2;
}else {
//如果一旦其中有一个字符判断失败,也就不继续向下判断
break;
}
}else {
break;
}
}
//把以每个字符为中心向左向右扩展的最大范围保存入store数字
store[i]=temp;
}
// for(int i:store) {
// System.out.print(i+" ");
// }
//找出最大的索引值
int index=0;
int max=store[0];
for(int i=1;i<store.length;i++) {
if(store[i]>=max) {
max=store[i];
index=i;
}
}
//输出所有为索引值为最大的回文字串
StringBuffer result=new StringBuffer();
// for(int i=0;i<store.length;i++) {
// if(store[i]==max) {
for(int j=index-store[index]/2;j<index+store[index]/2;j++) {
if(string.charAt(j)!='$'){
result.append(string.charAt(j));
}
}
// System.out.println();
// }
// }
return result.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Question5().longestPalindrome("babad"));
}
}