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);// 截取字符串}
}