5. 最長回文子串
解題思路
-
初始化:定義一個空字符串res來存儲當前找到的最長回文子串。
-
遍歷字符串:對于字符串s中的每個位置i,將其作為中心,進行兩次回文檢查:
-
將s[i]作為單個中心進行檢查。
-
將s[i]和s[i+1]作為共同中心進行檢查(針對偶數長度的回文)。
中心擴散:定義一個輔助函數palindrome,接收字符串s和兩個索引l、r作為參數。函數中,通過循環向兩邊擴散(即l索引向左移,r索引向右移),直到不滿足回文條件(s[l] != s[r]或索引越界)。最后返回以l和r為邊界的回文子串。 -
更新最長回文子串:每次中心擴散后,比較并更新存儲的最長回文子串res。
-
返回結果:遍歷完成后,res中存儲的就是最長的回文子串。
class Solution {public String longestPalindrome(String s) {String res = "";for(int i = 0; i < s.length(); i++){// 以每一個元素為中心 向兩邊進行擴散 尋找回文子串// 找到以s[i] 為中心的回文串String s1 = palindrome(s,i,i);// 找到以 s[i] 和s[i + 1] 為中心的回文串String s2 = palindrome(s,i,i + 1);res = res.length() > s1.length() ? res:s1;res = res.length()> s2.length() ? res:s2;}return res;}String palindrome(String s,int l,int r){// 防止索引越界while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){l--;r++;}return s.substring(l + 1,r);// 截取字符串}
}