classSolution{ publicstatic String longestPalindrome(String s){ int n = s.length(); //预判断 if (n <= 1) { return s; } //start,end:最长回文子串的左右标记 int start; int end; //max:最长回文子串的长度,n:最长回文串中心点(奇数回文串情况) int max = 1; int k = 0;
for (int i = 0; i < n - 1; i++) { int lenOdd = getPalind(s, i, i);//奇数情况 int lenEven = getPalind(s, i, i + 1);//偶数情况 int imax = lenOdd > lenEven ? lenOdd : lenEven; if (imax > max) {//更新最长回文子串信息 max = imax; k = i; } } //两种情况分别处理 if (max % 2 == 0) { start = k - (max / 2) + 1; end = k + (max / 2); } else { start = k - (max - 1) / 2; end = k + (max - 1) / 2; } return s.substring(start, end + 1);
}
privatestaticintgetPalind(String s, int left, int right){ while (((left >= 0) && (right < s.length())) && s.charAt(left) == s.charAt(right)) { left--; right++; } return (right - left) - 1;//长度为right-left+1,此处right和left各多一位。因此-2 }
classSolution { public: string longestPalindrome(string s){ int n = s.size(); if(n==1){ return s; }
int start,end,k=0; int max = 1; for(int i = 0;i<n-1;i++){ int maxOdd = getPalind(s,i,i); int maxEnev = getPalind(s,i,i+1); int imax = maxOdd>maxEnev?maxOdd:maxEnev;
classSolution{ publicstaticintmaxArea(int[] height){ int n = height.length; if(n<2){ return0; } int left = 0; int right = n-1; int result = 0; while (left<right){ int max = getMin(height[left],height[right])*(right-left); result = getMax(max,result); if(height[left]<height[right]){ ++left; }else { --right; } } return result; }