O(N2) code
class Solution {
public:
string longestPalindrome(string str) {
int size = str.length();
int ps = 0, maxLen = 1;
vector<vector<bool>> isP(size, vector<bool>(size, false));
// one character string and two character sub-strings
for (int s = 0; s < size; ++s) {
isP[s][s] = true;
int e = s + 1;
if ((e < size) && (str[s] == str[e])) {
isP[s][s+1] = true;
ps =s ; maxLen = 2;
}
}
for (int step = 2; step < size; ++step) {
for (int s = 0; s + step < size; ++s) {
int e = s + step;
if ((str[s] == str[e]) && (isP[s+1][e-1])) {
isP[s][e] = true;
ps = s; maxLen = step + 1;
}
}
}
return str.substr(ps, maxLen);
}
};
本文介绍了一种使用动态规划思想解决寻找字符串中最长回文子串问题的方法,并通过C++代码实现。该算法的时间复杂度为O(N^2),适用于需要高效查找回文子串的场景。
507

被折叠的 条评论
为什么被折叠?



