给你一个字符串 s,找到 s 中最长的回文子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题目采用中心扩展法进行实现,首先遍历整个数组,在遍历的过程中,对于数组中的每个元素都进行奇数与偶数长度的扩展,在下一次的扩展之后进行比较,然后进行相应的更新操作。实现代码如下所示:
import java.util.Scanner;
public class lala {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String my_in;
my_in = in.nextLine();
String result = longestPalindrome(my_in);
System.out.println(result);
}
static String longestPalindrome(String s) {
if (s == null || s.length() < 1) {
return "";
}
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter(s, i, i);
int len2 = expandAroundCenter(s, i, i + 1);
int len = Math.max(len1, len2);
if (len > (end - start + 1)) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
public static int expandAroundCenter(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
--left;
++right;
}
return right - left - 1;
}
}