1. 程式人生 > 其它 >最長迴文子串 力扣 詳細註解

最長迴文子串 力扣 詳細註解

LeetCode 5 最長迴文子列

拿之前碼的測試一下哈, 第一次寫部落格

思路

  1. 迴文字串長度為基數和偶數兩種情況,迴文中心是一個還是兩個相同的字元

這是互斥的所以可以做個判斷,但無論如何作為中心向兩邊檢測的過程是一樣的。

暴力求解即可。

  1. 為了演算法實現的條件判斷,可以繁瑣,不必考慮反覆執行相同的判斷(這樣方便程式碼)
class Solution {
    public String longestPalindrome(String s) {

char[] str = s.toCharArray();
int[] range = new int[2];
int high=0;
int low=0;
int j=0;

//兩個特殊情況
if(s.length()==0||str==null){return "";}

//2. while(i<s.length()-1){  } 記住這個格式,他為機械化重複提供了一個很好的判定條件。只要滿足  “存在預留”   迴圈體即可進行++操作。
while(j<s.length()-1){

//如果連著有相同的,可以把他們一同當做字串的中心。
while(high<s.length()-1&&str[high]==str[high+1]){high++;}
while(low>0&&high<s.length()-1&&str[high+1]==str[low-1]){high++;low--;}
//update the max value
if((range[1]-range[0])<(high-low)){range[0]=low;range[1]=high;}
high=++j;
low=j;
}

return s.substring(range[0],range[1]+1);

    }
    }