- 题目描述
- 解法:滑动窗口,窗口从小到大
public String longestPalindrome(String s) {
// 用数组优化,避免频繁用charAt()
char[] array = s.toCharArray();
int length = s.length();
// 过滤一个字符
if (length == 1){
return s;
}
// 窗口的大小,从最大开始,一旦匹配就返回
int size = length;
while (size>=1){
// 窗口左指针
int left = 0;
do {
if (isPalindrome(array,left,left+size-1)){
return s.substring(left,left+size);
}
// 窗口左移
left++;
}while ((left+size)<=length);
// 缩小窗口
size--;
}
return "";
}
// 判断子串是否是回文
public boolean isPalindrome(char[] array,int left,int right){
while (left<=right){
// 如果不是回文返回false
if (!(array[left++] == array[right--])){
return false;
}
}
return true;
}
运行结果