题目
给你一个字符串
s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
方法一:中间扩散
public class LongestPalindrome {
public int maxLen = 0;
public int begin = 0;
public static void main(String[] args) {
String s = "adam";
System.out.println(new LongestPalindrome().longestPalindrome(s));
}
public String longestPalindrome(String s) {
char[] chars = s.toCharArray();
int lens = chars.length;
if (lens<2) {
return s;
}
deal(chars, lens/2, 0);
return s.substring(begin, begin+maxLen);
}
private void deal(char[] chars, int k, int flag) {
int leng = chars.length;
int l = k-1;
int r = k+1;
//解决奇偶
while (l>=0 && chars[l]==chars[k]) {
l--;
}
while (r<leng && chars[r]==chars[k]) {
r++;
}
//中心扩展
int ll = l;
int rr = r;
while (ll>=0 && rr<leng && chars[ll] == chars[rr]) {
ll--;
rr++;
}
if (rr-ll-1>maxLen) {
maxLen = rr-ll-1;
begin = ll+1;
}
if (flag>=0 && (leng-r-1)*2>maxLen) {
deal(chars, r, 1);
}
if (flag<=0 && (l+1)*2>maxLen) {
deal(chars, l,-1);
}
}
}
LeetCode测试结果

该文章介绍了一个Java程序,用于解决在给定字符串中找到最长回文子串的问题。程序采用了中间扩散的策略,首先检查字符串的中心,然后向两侧扩展,以找到可能的回文子串。代码在LeetCode上进行了测试,并提供了详细的逻辑解析。
338

被折叠的 条评论
为什么被折叠?



