问题描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
解决思路:
根据当前最大回文串的长度 maxLength 来调整遍历跨度( i 的上限和 j 的起点 ),找到最大的可能性
/*
*作者:赵星海
*时间:2020/9/2 15:09
*用途:最长回文子串
*/
public String longestPalindrome(String s) {
int length = s.length();
if (length < 2) return s;
int maxLength = 1;//最大回文串的终点
int start = 0;//最大回文串的起点
char[] chars = s.toCharArray();
for (int i = 0; i < length - maxLength; i++) {
for (int j = i + maxLength; j < length; j++) {
if (valid(chars, i, j)) {
maxLength = j - i + 1;
start = i;
}
}
}
return s.substring(start, start + maxLength);
}
//判断该段落是否是回文串
public boolean valid(char[] chars, int left, int right) {
while (left < right) {
if (chars[left] != chars[right]) return false;
left++;
right--;
}
return true;
}