最长回文子串(力扣第5题)
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
/**
* 解题思路:从一个字符串中找出最长的回文串,核心在于需要使用从中间往两边发散的双指针
* 如果回文串是奇数,那么中心字符是一个
* 如果回文串是偶数,那么中心字符是两个
*/
class Solution {
public String longestPalindrome(String s) {
String resp = "";
for (int i = 0; i < s.length(); i++) {
//长度为奇数
String oddPalineDrome = palinDrome(s, i, i);
//长度为偶数
String evenPalineDrome = palinDrome(s, i, i + 1);
//找出最长的回文串
resp = resp.length() > oddPalineDrome.length()?resp:oddPalineDrome;
resp = resp.length() > evenPalineDrome.length()?resp:evenPalineDrome;
}
return resp;
}
/**
* 找出并判断是否是回文串
* @param s
* @param left
* @param right
* @return
*/
public String palinDrome(String s,int left,int right){
//left、right指针不能越界,同时指针指向的数必须相等才能保证是回文串
while(left >= 0 && right <s.length() && s.charAt(left) == s.charAt(right)){
//指针发散
left--;
right++;
}
//left因为在前面已经减一了,所以这里要加一。
return s.substring(left+1,right);
}
}