求最长回文子串

 

 

 

本质上字符串这种题都可以暴力穷举 但是还是要用更好的算法试试

我开始没有想到这是一道可以用动态规划解决的问题

 

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int n = s.size();
 5         vector<vector<int>> dp(n, vector<int>(n));
 6         string ans;
 7         for (int len = 0; len < n; ++len) {
 8             for (int i = 0; i + len < n; ++i) {
 9                 int j = i + len;
10                 if (len == 0) {
11                     dp[i][j] = 1;
12                 } else if (len == 1) {
13                     dp[i][j] = (s[i] == s[j]);
14                 } else {
15                     dp[i][j] = (s[i] == s[j] && dp[i + 1][j - 1]);
16                 }
17                 if (dp[i][j] && len + 1 > ans.size()) {
18                     ans = s.substr(i, len + 1);
19                 }
20             }
21         }
22         return ans;
23     }
24 };

 

posted @ 2020-10-03 10:53  然终酒肆  阅读(141)  评论(0编辑  收藏  举报