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);
        
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,735评论 0 2
  • https://leetcode.windliang.cc/ 第一时间发布 题目描述(中等难度) 给定一个字符串,...
    windliang阅读 2,118评论 0 0
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 11,527评论 1 42
  • 第五章******************************************************...
    fastwe阅读 3,978评论 0 0
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 9,510评论 2 13