class Solution {
public:
    bool dp[1001][1001];
    string longestPalindrome(string s) {
        for(int i=0;i<1001;i++) dp[i][i]=true;
        int len = s.length();
        int idx = 1;pair<int,int> M;int MAXI = 0;
        while(true){
            bool flag = false;
            for(int i=0;i<len;i++){
                int l = i-idx;int r = i+idx;
                if(0<=l&&r<len){
                    flag = true;
                    if(s[l]==s[r]){
                        if(dp[l+1][r-1]){
                            dp[l][r]=true;
                            if(MAXI<r-l){
                                MAXI = r-l;
                                M={l,r};
                            }
                        }
                    }
                }
                int ll = i;int rr = i+idx;
                if(0<=ll&&rr<len){
                    flag = true;
                    if(s[ll]==s[rr]){
                        if(idx==1){
                            dp[ll][rr]=true;
                            if(MAXI<rr-ll){
                                MAXI = rr-ll;
                                M={ll,rr};
                            }
                        }
                        if(dp[ll+1][rr-1]){
                            dp[ll][rr]=true;
                            if(MAXI<rr-ll){
                                MAXI = rr-ll;
                                M={ll,rr};
                            }
                        }
                    }
                }
            }
            idx++;
            if(!flag) break;
        }
        return s.substr(M.first,M.second-M.first+1);
    }
};


dp?로 했습니다

지적이나 조언 매우감사합니다