【leetcode刷题,Java技术类校招面试题汇总

糊涂算法,难得糊涂

今天来一道中等题,看看自己功力几何?

Question


[](

)5. 最长回文子串

难度:中等

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = “babad”

输出:“bab”

解释:“aba” 同样是符合题意的答案。

示例 2:

输入:s = “cbbd”

输出:“bb”

示例 3:

输入:s = “a”

输出:“a”

示例 4:

输入:s = “ac”

输出:“a”

提示:

1 <= s.length <= 1000

s 仅由数字和英文字母(大写和/或小写)组成

Solution


之前我们做过一道题是:最长不重复子串。当时使用的是滑动窗口法

这道题增加了回文的约束,那么该怎么处理回文,可以在纸上写一个回文串观察一下,有什么特点呢?

从中心点向两端发散

对吧,所以我们要滑动这个中心点,并对每一个中心点,进行左右扩展,判断左右字符是否相等即可。

  • null和空字符串的特殊情况处理掉

  • 有一个可滑动且大小可变的窗口,窗口左端(start)不动,右端(end)向后移动

  • 由于字符串长度有奇数和偶数两种,所以我们需要同时计算从一个字符开始扩展和从两个字符之间开始扩展

  • 找出两种扩展中相对长的作为当前最大值

  • 新的start要从何处开始,如何扩展字符串只需要考虑的问题

还有一种马拉车算法更加快速,但有一定难度,面试一般不会出现,感兴趣的同学可以看一下

Code


所有leetcode代码已同步至github

欢迎star


/**

 * @author yitiaoIT

 */

class Solution {

    public String longestPalindrome(String s) {

    if (s == null || s.length() < 1) return "";

    int start = 0, end = 0;

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

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

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

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

        if (len > end - start) {

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

            end = i + len / 2;

        }

    }

    return s.substring(start, end + 1);

}



private int expandAroundCenter(String s, int left, int right) {

    int L = left, R = right;

    while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {

        L--;

        R++;



# 难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

![阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服](https://img-blog.csdnimg.cn/img_convert/f2fb91cfd0101c9e9a99e5065af8d275.png)

![阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服](https://img-blog.csdnimg.cn/img_convert/0728330c5fd4b9b8f13229d998cd1566.png)

![image.png](https://img-blog.csdnimg.cn/img_convert/2eef18ada22c85b877d8d300b13e1fc3.png)


# 

扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

[外链图片转存中...(img-YvTpSLJE-1630664172759)]

[外链图片转存中...(img-jzu9APXs-1630664172761)]

[外链图片转存中...(img-D7sr2SjH-1630664172763)]


# 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值