最大回文串(暴力解法)

看着视频,写了一下代码,基本就跟力扣里面的暴力解法差不多,以下注解是自己的理解,有错误还请指出,记录一下自己的刷题。

 

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;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值