题目:
给你一个字符串 s
,找到 s
中最长的回文
子串
。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
例子:
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
下面是代码实现:
这是我认为比较简单的方法了:
class Solution {
public String longestPalindrome(String s) {
//判断字符串的长度是否为单一的;
int len = s.length();
if(len<2){
return s;//如果为单字符串则返回s
}
int maxlen=1;
//begin是回文数的左边的位置
int begin=0;。
for(int i=0;i<s.length()-1;i++){ //由于后面要i+1,则I<s.length()-1
//以i为中心的回文字符串的长度
int len1 =maxLengh(s,i,i);
//以i和i+1为中心的回文字符串的长度
int len2 = maxLengh(s,i,i+1);
//比较长度,取最大值
int newlen = Math.max(len1, len2);
if(newlen>maxlen){
maxlen=newlen;
//最长的回文数:最左边+回文字符串的长度
begin=i-(maxlen-1)/2;
}
}
//返回最长的回文字符串
return s.substring(begin,begin+maxlen);
}
private int maxLengh(String s,int left,int right){
int L=left;
int R=right;
while(L >= 0 && R < s.length()&&s.charAt(L)==s.charAt(R)){
R++;
L--;
}
//返回最长的回文字符串的长度
return R-L-1;
}
}
运行结果:
执行用时分布
16ms
击败86.06%使用 Java 的用户
消耗内存分布
41.38MB
击败75.87%使用 Java 的用户