zoukankan      html  css  js  c++  java
  • 5.最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    
     /*动态规划的核心是找到状态转移公式,这道题的状态转移明显是若一个子串是回文子串
        且这个子串的前一个字符与后一个字符相同,则回文子串长度加2;
        想办法表示一个状态:isPalindrome[i][j]=true表示下标从i到j的子串是回文子串*/
        string longestPalindrome(string s) {
            int n=s.size();
            bool **isPalindrome=new bool*[n];
            for(int i=0;i<n;++i){
                isPalindrome[i]=new bool[n];
                memset(isPalindrome[i],0,n);
            }
            int start=0,maxLength=1;
            for(int j=0;j<n;++j){
                for(int i=0;i<=j;++i){
                    if(j-i<2) isPalindrome[i][j]=(s[i]==s[j]);
                    else {
                        isPalindrome[i][j]=(s[i]==s[j]&&isPalindrome[i+1][j-1]);
                    }
                    if(isPalindrome[i][j]==true&&j-i+1>maxLength) {
                        start=i;
                        maxLength=j-i+1;
                    }
                }
            }
            return s.substr(start,maxLength);        
        }
    
  • 相关阅读:
    [NOIP2013] 提高组 洛谷P1979 华容道
    Vijos P1404 遭遇战
    CodeVS 1506 传话
    P1546 最短网络 Agri-Net
    HDU 4747 Mex
    POJ1020 Anniversary Cake
    【数据结构】平衡二叉树
    【数据结构】二叉排序树
    【数据结构】二叉树
    概念源于生活
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/13299834.html
Copyright © 2011-2022 走看看