Create 5.cpp

master
Kirigaya Kazuto 2018-06-25 21:06:54 +08:00 committed by GitHub
parent 454daecd5d
commit ebde1c6fe3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 49 additions and 0 deletions

49
LeetCode-CN/5.cpp Normal file
View File

@ -0,0 +1,49 @@
class Solution {
public:
// dp[i][j]: string from i to j is palindromic
// dp[i][j]=true if dp[i+1][j-1]==true && s[i]==s[j]
static bool dp[1001][1001];
string longestPalindrome(string s) {
int sz = s.size();
memset(dp, false, sizeof(dp));
int max_len = -1;
int begin_at = -1;
for (int i = 0; i < sz - 1; i++)
{
dp[i][i] = true;
if (s[i] == s[i + 1])
{
dp[i][i + 1] = true;
max_len = 2;
begin_at = i;
}
}
for (int L = 3; L <= sz; L++)
{
for (int i = 0; i <= sz - L; i++)
{
if (dp[i + 1][i + L - 2] && s[i] == s[i + L - 1])
{
dp[i][i + L - 1] = true;
max_len = L;
begin_at = i;
}
}
}
// debug
// cout << begin_at << " " << max_len << endl;
if (max_len == -1)
{
return s.substr(0, 1);
}
return s.substr(begin_at, max_len);
}
};
// decl
bool Solution::dp[1001][1001];