LeetCode——5. 最长回文子串
5.最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
分析
暴力破解,不要频繁使用substring截取子串,直接转为字符数组用下标操作更快,还有判断回文串用两个指针一头一尾比较,不使用stringbuffer的reverse()反转方法,这样不会超时。我第一次反之就超时了!∑(っ°Д°;)っ卧槽,不见了。
更牛批的方法等我开窍┓(;´_`)┏
代码
//先试一把暴力破解
class Solution {
public String longestPalindrome(String s) {
if (s.equals(""))
return "";
char[] chars = s.toCharArray();
int resLength = 0;
int begin = 0;
int end = 0;
for(int i = 0; i < chars.length-1 ; i++) {
for(int j = i+1; j < chars.length ; j++) {
if(j-i+1>resLength){ //如果大于最长回文子串长度
if(judge(chars,i,j)){ //判断是否为回文串
resLength = j-i+1; //更新最长回文子串长度
begin = i; //更新下标
end = j;
}
}
}
}
return s.substring(begin,end+1);
}
// public static boolean judge(String s1){
// String s2 = new StringBuffer(s1).reverse().toString();
// if(s1.equals(s2)){
// return true;
// }else {
// return false;
// }
// }
private boolean judge(char[] chs, int low, int high){ //判断回文
while(low <= high){
if(chs[low] != chs[high])
return false;
high--;
low++;
}
return true;
}
}