5. Longest Palindromic Substring

2018-04-02  本文已影响0人  weego

Description

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Input: "cbbd"
Output: "bb"

Solution

                 i==j   //条件1
dp[i][j]  =      j==i+1 && s[i]==s[j]   //条件2
                 j>i+1 && s[i]==s[j] && dp[i+1][j-1]  //条件3

注意i、j的变化趋势,这样遍历一个二维数组的上三角即可求解

string longestPalindrome(string s) {
    int len = s.length();
    int begin = 0, maxLen = 0;
    vector<vector<bool> > dpVec(len, vector<bool>(len, false));
    for (int i=len-1; i>=0; --i) {
        for (int j=i; j<len; ++j) {
            if (i==j || (j==i+1 && s[i]==s[j]) || (j>i+1 && s[i]==s[j] && dpVec[i+1][j-1])) {
                dpVec[i][j] = true;
                if (j-i+1 > maxLen) {
                    begin = i;
                    maxLen = j - i + 1;
                }
            }
        }
    }
    return s.substr(begin, maxLen);
}
上一篇 下一篇

猜你喜欢

热点阅读