반응형
https://leetcode.com/problems/longest-palindromic-substring/description/
dp를 이용하여 풀었습니다.
s[i] ~ s[j]가 palindromic substring이라면, dp[i][j]는 문자열의 길이를 저장해줍니다.
dp[i - 1][j + 1] = s[i - 1] == s[j + 1] ? dp[i][j] + 2 : 0
길이가 1인 substring 부터 검사해주었습니다.
class Solution {
public:
int dp[1000][1000] = {0};
string longestPalindrome(string s) {
int l = 0, r = 0, mx = 1;
for(int i=0; i<s.size(); i++) {
dp[i][i] = 1;
}
for(int i=0; i<s.size() - 1; i++) {
if(s[i] == s[i + 1]) {
dp[i][i + 1] = mx = 2;
l = i, r = i + 1;
}
}
for(int i=0; i < s.size(); i++) {
for(int j=0; i + j < s.size(); j++) {
if(!(j - 1 >= 0 && j + i + 1 < s.size())) continue;
if(s[j - 1] == s[j + i + 1] && dp[j][j + i]) {
dp[j - 1][j + i + 1] = dp[j][j + i] + 2;
if(dp[j - 1][j + i + 1] > mx) {
mx = dp[j - 1][j + i + 1];
l = j - 1, r = j + i + 1;
}
}
}
}
return s.substr(l, r - l + 1);
}
};
반응형
'Algorithm' 카테고리의 다른 글
LeetCode 1356. Sort Integers by The Number of 1 Bits (0) | 2023.10.30 |
---|---|
LeetCode 2438. Range Product Queries of Powers (1) | 2023.10.28 |
LeetCode 823. Binary Trees With Factors (1) | 2023.10.26 |
LeetCode 779. K-th Symbol in Grammar (0) | 2023.10.26 |
LeetCode 515. Find Largest Value in Each Tree Row (0) | 2023.10.24 |