publicclassSolution1{publicstaticvoidmain(String[] args){System.out.println(newSolution1().longestPalindrome("abcdcba"));System.out.println(newSolution1().longestPalindrome("abc"));System.out.println(newSolution1().longestPalindrome("aabc"));System.out.println(newSolution1().longestPalindrome("aabccc"));System.out.println(newSolution1().longestPalindrome("abcecdef"));System.out.println(newSolution1().longestPalindrome("aaaaaaaaaaba"));}publicStringlongestPalindrome(String s){StringBuilder builder =newStringBuilder("#");for(int i =0; i < s.length(); i++){
builder.append(s.charAt(i));
builder.append("#");}String str = builder.toString();List<Integer> list =newArrayList<>();int center =-1;int right =-1;int leftIndex =-1;int rightIndex =-1;for(int i =0; i < str.length(); i++){int cut;if(i <= right){int curLeft = center *2- i;
cut =Math.min(list.get(curLeft), i - center);
cut =expand(str, i - cut -1, i + cut +1);}else{
cut =expand(str, i -1, i +1);}
list.add(cut);if(i + cut > right){
right = i + cut;
center = i;}if(cut *2+1> rightIndex - leftIndex){
rightIndex = i + cut;
leftIndex = i - cut;}}StringBuilder result =newStringBuilder();for(int i = leftIndex; i <= rightIndex; i++){if(str.charAt(i)!='#'){
result.append(str.charAt(i));}}return result.toString();}privateintexpand(String str,int left,int right){while(left >=0&& right < str.length()&& str.charAt(left)== str.charAt(right)){
left--;
right++;}return(right - left -2)/2;}}