最長迴文子串 力扣 詳細註解
阿新 • • 發佈:2021-12-05
LeetCode 5 最長迴文子列
拿之前碼的測試一下哈, 第一次寫部落格
思路
- 迴文字串長度為基數和偶數兩種情況,迴文中心是一個還是兩個相同的字元
這是互斥的所以可以做個判斷,但無論如何作為中心向兩邊檢測的過程是一樣的。
暴力求解即可。
- 為了演算法實現的條件判斷,可以繁瑣,不必考慮反覆執行相同的判斷(這樣方便程式碼)
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); } }