5. 最长回文子串

https://writings.sh/post/algorithm-longest-palindromic-substring

package leetcode;

public class demo_5 {
    public String longestPalindrome(String s) {
        String str=String.valueOf(s.charAt(0));
        String s1=new String();
        for(int i=0;i<s.length();i++) {
            for(int j=i+str.length();j<=s.length();j++) {
                s1=s.substring(i,j);
                if(strPalindrome(s1)) {
                    if(s1.length()>str.length()) {
                        str=s1;
                    }
                }
            }
        }
        return str;
    }
    
    //判断是否为回文字符串
    public boolean strPalindrome(String s) {
        int left=0;
        int right=s.length()-1;
        while(left<right) {
            if(s.charAt(right)!=s.charAt(left)) {
                return false;
            }
            left=left+1;
            right=right-1;
        }
        return true;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s="babcd";
        demo_5 d5=new demo_5();
        System.out.println(d5.longestPalindrome(s));
    }
}

 简化版

 1     public String longestPalindrome(String s) {
 2         int[] range = new int[2];
 3         char[] str =s.toCharArray();
 4         for(int i=0;i<s.length();i++) {
 5             int high=i;
 6             int low=i;
 7             //判断有几个相同的字符
 8             while(high<s.length()-1&&str[high+1]==str[low]) {
 9                 high++;
10             }
11             i=high;
12             //从中间向左右扩散
13             while(low>0&&high<s.length()-1&&str[low-1]==str[high+1]) {
14                 low=low-1;
15                 high=high+1;
16             }
17             if((high-low)>(range[1]-range[0])) {
18                 range[0]=low;
19                 range[1]=high;
20             }
21         }
22         return s.substring(range[0],range[1]+1);
23     }

 

posted on 2021-04-09 19:49  一仟零一夜丶  阅读(44)  评论(0)    收藏  举报