题意:求最长回文子串。
思路:记录到目前为止,以该字母结尾的所有字串的起始位置,之后的字符遍历这些长度,记录更新后的起始位置。
class Solution {
public:
string longestPalindrome(string s) {
vector<vector<int> > pal;
vector<int> temp(1, 0);
pal.push_back(temp);
for(int i = 1; i < s.length(); ++ i) {
vector<int> tempv;
for(int j = 0; j < pal[i - 1].size(); ++ j) {
if(pal[i - 1][j] - 1 >=0 && s[pal[i - 1][j] - 1] == s[i]) { //cout << pal[i - 1][j] - 1 << endl;
tempv.push_back(pal[i - 1][j] - 1);
}
}
if(s[i] == s[i - 1]) tempv.push_back(i - 1);
tempv.push_back(i);
pal.push_back(tempv);
}
string re;
int maxlen = 0;
for(int i = 0; i < pal.size(); ++ i) {
for(int j = 0; j < pal[i].size(); ++ j) {
if(maxlen < i - pal[i][j] + 1) {
maxlen = i -pal[i][j] + 1;
re = s.substr(pal[i][j], maxlen);
}
}
}
return re;
}
};