原题:(频率2)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example:
Input: "cbbd"
Output: "bb"
题意:求最长的回文子串
代码和思路:
// 中心扩展法
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
if(n==1) return s;
//最长子串在数组中开始的index
int start = 0;
//回文数组的总长度
int maxLength = 0;
// 类似于aba这种情况,以i为中心向两边扩展
for(int i=0;i<n;i++){
int l = i-1;
int r = i+1;
while(l>=0 && r<n && s.charAt(l)==s.charAt(r)){
if(r-l+1>maxLength){
maxLength = r-l+1;
start = l;
}
l--;
r++;
}
}
// 类似于abba这种情况,以i,i+1为中心向两边扩展
for(int i=0;i<n;i++){
int l = i;
int r = i+1;
while(l>=0 && r<n && s.charAt(l)==s.charAt(r)){
if(r-l+1>maxLength){
maxLength = r-l+1;
start = l;
}
l--;
r++;
}
}
if(maxLength>0){
return s.substring(start, start + maxLength);
}
return s.substring(0,1);
}
}