最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
动态规划:dp[j][i]是只j~i的字符串是否为回文字符串
string longestPalindrome(string s) {
if (s.size() == 0) return s;
string res = s;
int maxLen = 0;
int n = s.size();
bool dp[n][n];
fill_n(&dp[0][0], n*n, false);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
if (i == j) dp[j][i] = true;
if ((i - j) == 1) dp[j][i] = (s[j] == s[i] ? true : false);
if ((i - j) > 1) dp[j][i] = (s[i] == s[j]) && dp[j + 1][i - 1];
if (dp[j][i] == true) {
if (i - j + 1 > maxLen) res = s.substr(j, i - j + 1);
maxLen = max(i - j + 1, maxLen);
}
}
}
return res;
}
效率挺低的。。高效率的再更新吧