力扣第5题最长回文子串

### 解题思路

再看了好几遍视频和代码才看懂的,不过自己写的代码没官方的代码看起来简单明了,建议看下官方的解题思路!

这两行代码看似含简单,但是难理解,要到草稿纸上不断的演示,来算i到目标下标之间的关系!

l = i - (len-1)/2;

r = i + len/2 + 1;

这里有时候会让上面的越界,就当“0123210”,下面这个函数最后返回的值是9,当时再想最后这个下标是0和7,所所以在返回时+1,最后发现这个时错误的,当while循环结束后l=-1,r=7,所以在最后想起来在返回时-1,因为这个原因我在此换了while里面的好几个条件,发现啥都没用。

while (l>= 0&& r < s.length() && s.charAt(l) == s.charAt(r) ){

            l--;

            r++;

        }

        return r-l+1;

最后修改的。

while (l>= 0&& r < s.length() && s.charAt(l) == s.charAt(r) ){

            l--;

            r++;

        }

        return r-l-1;

### 代码

```java

class Solution {

    public String longestPalindrome(String s) {

        if (s.length() < 1 || s == null){

            return "";

        }

        int l = 0,r = 0;

        for (int i = 0; i < s.length();i++){

            int len1 = ss(s, i, i);

            int len2 = ss(s, i, i + 1);

            int len = Math.max(len1,len2);

            if (len > r - l){

                l = i - (len-1)/2;

                r = i + len/2 + 1;

            }

        }

        return s.substring(l,r);

    }

    public int ss(String s,int l,int r){

        while (l>= 0&& r < s.length() && s.charAt(l) == s.charAt(r) ){

            l--;

            r++;

        }

        return r-l-1;

    }

}

```

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值