题意:
找字符串s里的最长回文串。
思路:
动态规划。dp[j][i]表示从i到j的字符串是否能构成回文串。当s[i] == s[j] && (dp[j+1][i-1] || i == j+1)时,dp[j][i]为1。
代码:
class Solution {
public:
string longestPalindrome(string s) {
int n = s.length();
vector<vector<int> > dp(n, vector<int>(n, 0));
int len = 1;
int resl = 0, resr = 0;
for (int i=0; i<n; ++i)
dp[i][i] = 1;
for (int l=2; l<=n; ++l) {
for (int i=0, j=i+l-1; j<n; ++i, ++j) {
dp[i][j] = (s[i] == s[j] && (dp[i+1][j-1] || l ==2));
if (dp[i][j] && l > len) {
len = l;
resl = i, resr = j;
}
}
}
return s.substr(resl, len);
}
};
实验没做出来,老师布置的任务没有头绪,胃疼了两天,五月,真是一丧到底。
今天想到了一句新的毒鸡汤:都一大把年纪了,卖惨给谁看呢。
无论如何,生活还得继续鸭。
就算结果不尽如人意,尽力了就好。
加油,涛涛酱。