LeetCode-5:パリンドローム最長部分文字列

一つ、タイトル説明

ここに画像を挿入説明

第二に、問題解決のためのアイデア

  • まず、2次元の定義dp[len][len]ブール配列を
  • dp[i][j]値はから表現するs[i]s[j]、このパリンドローム配列の部分文字列
  • 状態遷移方程式:dp[i][j] = dp[i + 1][j - 1] && s[i] == s[j];
  • 説明:頭と尾の要素は、必ずしも同じながら、文字列が回文文字列の場合は、両端を断つ、文字列の残りの部分は、回文である、唯一の方法は、回文文字列です

第三に、問題解決のためのコード

class Solution {
public:
    string longestPalindrome(string s) {
        string sln;
        int len = s.size();
        if (!len)
            return sln;
        if (len == 1)
            return s;
        int MAX = 1;
        int rear = 0, prior = 0;
        bool dp[len][len];
        for (int i = 0; i < len; i++)
            dp[i][i] = true;
        for (int i = 1; i < len; i++) {
            for (int j = 0; j < len; j++) {
                if (i + j < len) {
                    if (i == 1)
                        dp[j][i + j] = (s[j] == s[i + j]);
                    else
                        dp[j][i + j] = (dp[j + 1][i + j - 1]) && (s[j] == s[i + j]);
                    if (dp[j][i + j]) 
                        if (i + 1 > MAX) {
                            MAX = i + 1;
                            rear = j;
                            prior = i + j;
                        }
                }
            }
        }
        sln = s.substr(rear, prior - rear + 1);
        return sln;
    }
};

第四に、業績

ここに画像を挿入説明

公開された30元の記事 ウォンの賞賛3 ビュー818

おすすめ

転載: blog.csdn.net/weixin_44587168/article/details/105324525