给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
解答:
class Solution {
public String longestPalindrome(String s) {
if (s.length()==0){
return "";
}
char[] arr = s.toCharArray( );
int longest_len = 1;
int[] index = new int[2];
int[] answer = new int[]{0,0};
for (int i = 1; i < arr.length; i++) {
if (arr[i] == arr[i - 1]) {
index = jud(arr,i-1,i);
}
if (index[1]-index[0]+1>longest_len){
longest_len = index[1]-index[0]+1;
answer = index;
}
if (i>=2&&arr[i] == arr[i - 2]){
index = jud(arr,i-2,i);
}
if (index[1]-index[0]+1>longest_len){
longest_len = index[1]-index[0]+1;
answer = index;
}
}
return s.substring(answer[0],answer[1]+1);
}
public int[] jud(char[] arr, int start, int end) {
if (start - 1 >= 0 && end + 1 <= arr.length - 1) {
if (arr[start - 1] == arr[end + 1]) {
return jud(arr, start - 1, end + 1);
} else {
return new int[]{start, end};
}
}
return new int[]{start, end};
}
}
复杂度计算
- 时间复杂度:O(n^2)
- 空间复杂度:由于复制了一遍字符串,所以O(n),否则理论上是O(1)