中心扩展法则 class Solution { public: string longestPalindrome(string s) { int m = s.size(); if (m < 2) return s; int maxlen =0 ; int start = 0; int end = 0; //string res = s.substr(0, 1); for (int i = 0; i < m; i++) { // 当中心点是奇数时候 例如aba int len1 = centerPariol(s, i, i); // 当中心点是偶数的时候 例如 bbaabb int len2 = centerPariol(s, i, i + 1); maxlen = max(len1, len2); // end-strat+1=元素个数 if (maxlen > end - start ) { //maxlen-1 避免回文串为偶数时 下标超出 start = i - (maxlen-1) / 2; end = i + maxlen / 2; } } return s.substr(start,end-start+1); } int centerPariol(string s, int left, int right) { int N = s.size(); int i = left; int j = right; while (i >= 0 && j < N&&s[i]==s[j]) { // 向左扩展 i--; // 向右扩展 j++; } return j-i-1; } }; 动态规划