AI智能
改变未来

力扣LeetCode #5 最长回文子串(LongestPalindrome)


– 题目描述

给定一个字符串 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;}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 力扣LeetCode #5 最长回文子串(LongestPalindrome)