– 题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
来源:LeetCode(PHP开发/ 示例
- 示例1
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。 - 示例2
输入: “cbbd”
输出: “bb”
– 思路分析
回文字符串简单理解就是s[i] = s[s.length()-1-i]。比较容易的做法就是依次以每个字符作为开头,将和这个字符相同并且位置最远的那个字符作为结尾构成子串,判断该子串是否是回文:如果是回文,则将该子串与之前的最长回文子串相比;如果不是回文,则寻找下一个相对较远的的相同字符。
除此之外,需要注意的是,单个字符也算回文。
– JAVA实现
public class LongestPalindrome {public static String longestPalindrome(String s) {int len = s.length();String palind = \"\", pal;if(s.length() == 1)return s;for(int start = 0; start<len; start++) {char ch1 = s.charAt(start);int index = s.lastIndexOf(ch1); //因为找最长的,所以从尾部查找这个字符出现的位置while(index != -1) { //这个位置存在pal = s.substring(start, index+1); //截取这个字符串if(judge(pal)) { //是回文palind = pal.length() > palind.length() ? pal : palind; //和前面的回文子串比较谁更长break; //求到的一定是以ch1开头的最长回文子串}else //不对称index = s.lastIndexOf(ch1,index-1);}}return palind;}public static boolean judge(String s) { 判断是否是回文int len = s.length();for(int i =0; i<=len/2; i++) {if(s.charAt(i) != s.charAt(len-i-1))return false;}return true;}}