最长回文子串:link
1.最容易想到的是从每个位置向两边扩展得到最长回文子串。
class Solution {
private:
int start, len = 0;
void extend_palindrome(const string& s, int i, int j){
while(i >= 0 && j < s.size() && s[i] == s[j]){
i--; j++;
}
if(len < j - i - 1){
start = i + 1;
len = j - i - 1;
}
}
public:
string longestPalindrome(string s) {
if(s.size() < 2)
return s;
for(int i = 0; i < s.size() - 1; ++i){
extend_palindrome(s, i, i);
extend_palindrome(s, i, i + 1);
}
return s.substr(start, len);
}
};
1.最优的解法应该是mannacher算法
2.dp解法O(n2)的时间复杂度,dp先求解的顺序有点讲究。