Leecode5 longest-palindromic-substring

题目描述

找出给出的字符串S中最长的回文子串。假设S的最大长度为1000,并且只存在唯一解。

分析

  • 使用动态规划算法。pali[i][j] 代表从i下标到j下标的子串是否是回文。
  • 一个字符肯定是回文,两个字符如果一样,也是回文,进而初始化。
  • 以此考虑三个字符,四个字符…n个字符。
  • 如果在某次计算时,arr[i] == arr[i+n] 那么如果pili[i+1][i+n-1]是回文的话,整体也是回文。

java 代码

public class Solution {
    public String longestPalindrome(String s) {
        if(s == null || s.length() <= 1 )    return s;
        
       
        char [] arr = s.toCharArray();
        int len = arr.length;
        int start = 0;
        int length = 1;
        boolean pali [][] = new boolean [len][len];
        
        for(int i = 0; i < pali.length; i++){
            pali[i][i] = true;
           // length = 1;
        }
        
        for(int i = 0; i < arr.length-1; i++){
            if(arr[i] == arr[i+1]){
                pali[i][i+1] = true;                
                start = i;
                length = 1;
            }
        }
        
        for(int n = 2; n < len; n++){
            for(int i = 0; i+n  < len; i++){
                if(arr[i] == arr[i+n] && pali[i+1][i+n-1]){
                    pali[i][i+n] = true;
                    start = i;
                    length = n;
                }
            }
        }
        
        return s.substring(start,start+length+1);
        
    }
}
发布了52 篇原创文章 · 获赞 0 · 访问量 571

猜你喜欢

转载自blog.csdn.net/weixin_40300702/article/details/104929373