C++
class Solution {
public:
string longestPalindrome(string s) {
if (s.empty()) return "";
int dp[s.size()][s.size()] = {0}, left = 0, right = 0, len = 0;
for (int i = 0; i < s.size(); ++i) {
for (int j = 0; j < i; ++j) {
dp[j][i] = (s[i] == s[j] && (i - j < 2 || dp[j + 1][i - 1]));
if (dp[j][i] && len < i - j + 1) {
len = i - j + 1;
left = j;
right = i;
}
}
dp[i][i] = 1;
}
return s.substr(left, right - left + 1);
}
};
这是动态规划的方法,还有中心扩散法和Manacher's Algorithm 马拉车算法,马拉车还有点迷糊,等我过段时间再看下,然后再补上C的代码。
留下了没技术的泪水。