LeetCode OJ-- Longest Palindromic Substring **

https://oj.leetcode.com/problems/longest-palindromic-substring/

给一个string,求它的最长回文子串。

定义一个二维数组bool isPal[1000][1000];记录从 i 到 j 是否为回文的。

首先初始化 [i][i] = true;

              [i][i+1] = (s[i] == s[i+1])

之后对长度 len = 3 和 开始位置 i 进行遍历,复杂度 n*n : sPal[i][i+len-1] = (isPal[i+1][i+len-2] && (s[i] == s[i+len-1])); 判断首尾是否相等,并且中间的部分是否为 true。

class Solution {
public:
    string longestPalindrome(string s) {
        if(s == "")
            return "";
        
        bool isPal[1000][1000];

        for(int i = 0;i < s.size(); i++)
            isPal[i][i] = true;

        int begin = 0, maxlen = 1;

        for(int len = 2;len <= s.size(); len++)
        {
            for(int i = 0; i + len <= s.size(); i++)
            {
                if(len == 2)
                {
                    isPal[i][i+1] = (s[i] == s[i+1]);
                    if(isPal[i][i+1])
                    {
                        begin = i;
                        maxlen = len;
                    }
                }
                else
                {
                    isPal[i][i+len-1] = (isPal[i+1][i+len-2] && (s[i] == s[i+len-1]));
                    if(isPal[i][i+len-1])
                    {
                        begin = i;
                        maxlen = len;
                    }
                }
            }
        }
 
        return s.substr(begin,maxlen);
    }
};
原文地址:https://www.cnblogs.com/qingcheng/p/3870278.html