boolpalin(string s){ int l = 0; int r = s.length(); while(l < r){ if(s[l++] != s[r--]) returnfalse; } returntrue; }
求最长回文子子串
暴力枚举O(N4)
1 2 3 4 5 6 7 8 9
intgetMaxPalin(string s){ int len = s.length(); for(int i = len ; i >= 2 ; i --){ for(int j = 0 ; j+i-1 < len ; j ++){ if(palin(s.substr(j,i))) return i; } } return1; }
intgetMaxPalin(string s){ if(s.empty()) return0; int len = s.length(); int res = 1; dp[0] = 0; for(int i = 1 ; i < len ; i ++){ if(dp[i-1] > 0 && s[i] == s[dp[i-1]-1]){ dp[i] = dp[i-1]-1; }else{ int l = dp[i-1]; int r = i; int st = l; while(l < r){ if(s[l] == s[r]){ l++;r--; }else{ l++;r=i; st = l; } } dp[i] = st; } res = max(i - dp[i] + 1, res); } return res; }