最长回文子串
原创大约 1 分钟
题目:
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。输入:s = "cbbd"
输出:"bb"思考
中心扩展
回文串一定是对称的,我们可以循环从每一个字符开始朝左右两边扩展,判断两端的字符是否相等
由于字符串可能是奇数或者偶数两种情况,所以需要以一个字符为中心或者两个字符为中心
题解
class Solution {
public String longestPalindrome(String s) {
//保存结果
String res = "";
for (int i = 0; i < s.length(); i++) {
//奇数,以一个为中心
String s1 = expand(s,i,i);
//偶数,以两个为中心
String s2 = expand(s,i,i+1);
//
res = res.length() > s1.length() ? res : s1;
res = res.length() > s2.length() ? res : s2;
}
return res;
}
String expand(String s,int l,int r){
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
l--;
r++;
}
//返回以s[l]和s[r]为中心的最长回文串
return s.substring(l+1,r);
}
}