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;
}
}