给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
package my; public class LongestPalindromeSubstring { public String longestPalindrome(String s){ if(s== null ||s.length()<1){ return ""; } //初始化最大回文子串的起点和终点 int start =0; int end =0; //遍历每个位置,当做中心位 for(int i=0;i<s.length();i++){ int len1=expandCenter(s,i,i); int len2=expandCenter(s,i,i+1); //对比最大的长度 int len= Math.max(len1,len2); // 计算对应最大回文子串的起点和终点 if(len > end - start){ start = i-(len -1 )/2 ; end = i+ len/2 ; } } return s.substring(start,end + 1); } /** * * @param s 输入的字符串 * @param left 起始的左边界 * @param right 起始的右边界 * @return 回文串的长度 */ public int expandCenter(String s, int left,int right){ // left = right 的时候,此时回文中心是一个字符,回文串的长度是奇数 // right = left + 1 的时候,此时回文中心是一个空隙,回文串的长度是偶数 // 跳出循环的时候恰好满足 s.charAt(left) != s.charAt(right) while(left >=0 && right < s.length() && s.charAt(left) == s.charAt(right)){ left --; right++; } // 回文串的长度是right-left+1-2 = right - left - 1 return right - left - 1; } public static void main(String [] args){ String str ="ebababd"; LongestPalindromeSubstring lps =new LongestPalindromeSubstring(); String s = lps.longestPalindrome(str); System.out.println(s); } }