LeetCode: Longest Palindromic Substring

来源:互联网 发布:区块链是什么 知乎 编辑:程序博客网 时间:2024/05/08 04:07

思路:动态规划方法,设置dp[i][j]表示子串s(i,...,j)是否为回文串,则分三种情况:

1. s(i,...j)长度为1时,dp[i][j] = 1;

2. s(i,..,j)长度为2时,dp[i][j] = 1(s[i] == s[j]),或者dp[i][j] = 0 (s[i] != s[j]);

3. s(i,..,j)长度大于2时,dp[i][j] = dp[i+1][j-1] (s[i] == s[j]),或者dp[i][j] = 0 (s[i] != s[j])。

求解过程中,更新最长回文子串即可。

code:

class Solution {public:    string longestPalindrome(string s) {        int len = s.length();        bool dp[len][len];        for(int i = 0;i < len;i++)            for(int j = 0;j < len;j++)                dp[i][j] = false;        int Longest = 1;        int frontIndex = 0;        for(int i = 0;i < len;i++)            dp[i][i] = true;                    for(int L = 1;L < len;L++)            for(int i = 0;i < len;i++){                int j = i + L;                if(j < len){                    if(s[i] == s[j])                        dp[i][j] = (i == j-1) ? true : dp[i+1][j-1];                    if(dp[i][j]){                        Longest = L+1;                        frontIndex = i;                    }                }            }                return s.substr(frontIndex,Longest);    }};


0 0