最长回文子串

思路:动态规划 dp[i][j]表示i和j之间的最长回文子串长度

  1. dp[i][i]=1, 如果s[i-1]==s[i],dp[i-1][i]=2;
  2. 查找长度为3~s.length()的回文子串
  3. 对子串的每个字符i进行查找
class Solution {
public:
    string longestPalindrome(string s) {

        vector<vector<int>> dp(s.length(),vector<int>(s.length()));

        int start=0, maxlen=1;

        for(int i=0;i<s.length();i++)
        {
            dp[i][i]=1;

            if(i!=0 && s[i]==s[i-1])
            {
                dp[i-1][i]=1;
                start=i-1;
                maxlen=2;
            }
        }
        //从回文串长度为i=3-l进行判断;
        //令j=0~总长度-i,查找是否有 s[j:j+i]为回文串
        for(int i=3;i<=s.length();i++) //回文的长度
        {
            for(int j=0;j<=s.length()-i;j++)
            {
                int end=j+i-1;

                dp[j][end]=dp[j+1][end-1] && s[j]==s[end];

                if(dp[j][end])
                {
                    start=j;
                    maxlen=i;
                }
            }
        }

        return s.substr(start,maxlen);




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

推荐阅读更多精彩内容