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?로 했습니다
지적이나 조언 매우감사합니다
댓글 0