5. 最长回文子串【测试岗常见算法题】
题目
5. 最长回文子串---频率5次
找到 s 中最长的回文子串。
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
输入:s = "a"
输出:"a"
输入:s = "cbbd"
输出:"bb"
输入:s = "ac"
输出:"a"
思路
双指针
查找回文字符串的 都是从中间往两端进行遍历,并且要考虑字符串的奇数或者偶数。
遍历字符串S,分别以s[i] 为中心查找回文(此时把S当做奇数字符串) 和 s[i] ,s[i+1] 为中心查找回文(此时把S当做偶数字符串)
然后取结果最大值即可。
class Solution {
public String longestPalindrome(String s) {
//找回文子串-从中间往2端查找,返回回文字符串
//根据奇数、根据中间节点。偶数根据中间和中间+1节点。
String ret = "";
for (int i = 0; i < s.length(); i++) {
if(longestPalindrome(i,i,s).length()>ret.length()){
ret = longestPalindrome(i,i,s);
}
if(longestPalindrome(i,i+1,s).length()>ret.length()){
ret = longestPalindrome(i,i+1,s);
}
}
return ret;
}
public String longestPalindrome(int index1, int index2, String s) {
//根据index1,index2往2端查找回文字符串
int start = index1;
int end = index2;
while (start>=0 && end<s.length()){
if(s.charAt(start) == s.charAt(end)){
start--;
end++;
}else {
break;
}
}
return s.substring(start+1,end);
}
}

浙公网安备 33010602011771号