看着视频,写了一下代码,基本就跟力扣里面的暴力解法差不多,以下注解是自己的理解,有错误还请指出,记录一下自己的刷题。
class Solution {
public String longestPalindrome(String s) {
//如果字符串为空,则返回空字符串
if(s==null){
return"";
}
//计算字符串的长度,并用length记录其长度
int length=s.length();
//如果字符串的长度小于2,又不是空字符串,那为单字母,其本身为最长回文串
if(length<2){
return s;
}
//刚开始默认最大回文串的长度为1,其实就是默认最大为单字母,但是在后面循环过程中,又会不断更新,记录下最后最大回文串的长度
int maxlen=1;
//设置开始遍历的字符串位置,从头开始遍历原字符串
int begin=0;
//将字符串转为字符串数组
char[] charArray=s.toCharArray();
//第一层for循环从头遍历字符串到尾部,注意:数组最大序号是字符串长度减一
for(int i=0;i<length-1;i++){
//第二层for循环其实就是在第一层循环确定开始检查是否为回文串的位置的情况下,从这个确定的位置开始遍历
for(int j=i+1;j<length;j++){
//只要遍历到的字符串的位置到起始位置的长度大于目前存储的maxlen,就会执行后面的IsOverNumber判断字符串是否为回文串
if(j-i+1>maxlen&&IsOverNumber(charArray,i,j)){
//如果是回文串,就会更新下maxlen,让maxlen一直保持目前最大
maxlen=j-i+1;
//记录下此刻的起始位置
begin=i;
}
}
}
//用s.substring(i,j),返回字符串中的最大回文串
return s.substring(begin,begin+maxlen);
}
//返回值为boolean,如果是传进来的charArray数组存储的是回文串,则返回true,反之则返回false
public boolean IsOverNumber(char[] charArray,int i,int j){
//起始位置小于目前尾部位置
while(i<j){
//如果此时代表的左边位置字母和右边位置字母不相等,则不是回文串
if(charArray[i]!=charArray[j]){
return false;
}
//让起始位置加一,尾部位置减一
i++;
j--;
}
//只要能完成整个while循环,证明整个符串都不会符合if条件,所以会是一个回文串,返回true
return true;
}
}