给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
class Solution {
public String longestPalindrome(String s) {
if(s == null || s.length()<2){
return s;
}
int strLen=s.length();
int maxStart=0;
int maxEnd=0;
int maxLen=1;
boolean[][] dp=new boolean[strLen][strLen];
for(int j=1;j<strLen;j++){
for(int i=0;i<j;i++){
if(s.charAt(i) == s.charAt(j) && (j-i <= 2 || dp[i+1][j-1])){
dp[i][j]=true;
if(j-i+1 > maxLen){
maxLen=j-i+1;
maxStart=i;
maxEnd=j;
}
}
}
}
return s.substring(maxStart,maxStart+maxLen);
}
}
class Solution {
public String longestPalindrome(String s) {
int len=0;
int left=0;
int right=0;
int maxStart=0;
int maxLength=0;
if(s == null || s.length() == 0){
return "";
}
for(int i=0;i<s.length();i++){
len=1;
left=i-1;
right=i+1;
while(left >= 0 && s.charAt(left) == s.charAt(i)){
left--;
len++;
}
while(right < s.length() && s.charAt(right) == s.charAt(i)){
right++;
len++;
}
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){
right++;
left--;
len += 2;
}
if(len > maxLength){
maxLength=len;
maxStart=left+1;
}
}
return s.substring(maxStart,maxStart+maxLength);
}
}