动态规划 1234567891011121314151617181920212223242526class Solution { public: string longestPalindrome(string s) { int st = 0, L = 1; int len = s.size(); bool dp[1100][1100]; for(int i = 0; i < len; i ++) dp[i][i] = 1; //长度为1的子串都是回文串 for(int i = 2; i <= len; i ++) { //枚举长度 for(int j = 0; j + i - 1 < len; j ++) { //枚举位置 int k = j + i - 1; //结束位置 if(s[j] != s[k]) dp[j][k] = 0; //如果两端字符不一致不回文 else { if(i <= 3) dp[j][k] = 1; //长度为3或者2的都是回文 else dp[j][k] = dp[j+1][k-1]; //由之前状态推过来 } if(dp[j][k]) st = j, L = i; //更新长度和起始位置 } } return s.substr(st, L); }};