题目
给你一个字符串 s,找到 s 中最长的回文子串。
链接
https://leetcode-cn.com/problems/longest-palindromic-substring
代码
/**
* 05 最长回文子串
* 给你一个字符串 s,找到 s 中最长的回文子串。
* 输入:s = "babad"
* 输出:"bab"
* 解释:"aba" 同样是符合题意的答案。
*/
@Test void test5(){
String s = "a";
String s1 = longestPalindrome(s);
System.out.println(s1);
}
public String longestPalindrome(String s) {
//中心扩展法,单字符左右依次延伸判断左右是否相同
char[] chars = s.toCharArray();
int max = 1;
int start = 0;
//end 初始化 1防止截取为空返回
int end =1;
//奇数回文串 例:aba
for (int i = 0; i < s.length(); i++) {
int left = i-1;
int right = i +1;
while (left>=0 &&right<s.length()&&chars[left]==chars[right]){
if(right-left+1 >max){
start =left;
end = right+1;
max=right-left+1;
}
left--;
right++;
}
}
//偶数回文串 例:bb
for (int i = 0; i < s.length(); i++) {
int left = i;
int right = i +1;
while (left>=0 &&right<s.length()&&chars[left]==chars[right]){
if(right-left+1 >max){
start =left;
end = right+1;
max=right-left+1;
}
left--;
right++;
}
}
return s.substring(start,end);
}