1、题目描述
给你一个字符串 s
,找到 s
中最长的回文子串。
2、算法分析
这道题比较好想的是中心扩展法。刚刚用暴力解题了。
分析下吧。
主要是有以下几个点:
最长的回文子串maxLen;记录最长回文子串的开始位置,最后字符串截取:
s.substring(begin,begin+maxLen) 就行。
单写个方法判断回文。
数组比字符串效率高。
如果修改为s.charAt(i)取元素的话,效率会非常低。
3、代码实现
public class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2){
return s;
}
int maxLen = 1;
int begin = 0;
char[] charArray = s.toCharArray();
for(int i = 0;i < len - 1;i++){
for(int j = i + 1;j < len;j++){
if(j - i + 1 > maxLen && isValid(charArray,i,j)){
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin,begin + maxLen);
}
public boolean isValid(char[] charArray,int start,int end){
while(start < end){
if(charArray[start] != charArray[end]){
return false;
}
start++;
end--;
}
return true;
}
}