来源:力扣
思路:蛋炒饭
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
法一:中心扩散法
这个思路就很明显,左边找,然后右边找,不过奇怪的是,取消第一个while的循环,也能通过。
class Solution {
public String longestPalindrome(String s) {
if(s == null || s.length() == 0) return "";
int strLen = s.length();
int left = 0;
int right = 0;
int maxStart = 0;
int maxLen = 0;
int len = 1;
for(int i=0;i<strLen;i++){
left = i - 1;
right = i + 1;
while(left >= 0 && s.charAt(left) == s.charAt(i)){
left--;
len++;
}
while(right < strLen && s.charAt(right) == s.charAt(i)){
right++;
len++;
}
while(left >= 0 && right < strLen && s.charAt(right) == s.charAt(left)){
right++;
left--;
len+=2;
}
if(len > maxLen){
maxLen = len;
maxStart = left + 1;
}
len = 1;
}
return s.substring(maxStart,maxStart+maxLen);
}
}