面试热题(最长回文子串)

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串

输入:s = "babad"
输出:"bab"

       最长回文子串以前的博客已经讲过KMP算法以及比较不常见的Manacher算法,这两种两种算法都是比较经典的算法,如果有小伙伴想学习的欢迎浏览字符串算法,接下来我们会用其他的方式解决这道题目(相对于字符串专业算法来说,这种方式比较好记)

首先我们要知道什么是回文串?

  • 一个字符肯定是回文串

面试热题(最长回文子串)_第1张图片

  • 字符的个数都是偶数的字符串可以组成回文串

面试热题(最长回文子串)_第2张图片

---------------------------------------------------------------------------------------------------------------------------------

面试热题(最长回文子串)_第3张图片

 这种虽然字符的个数都是偶数但是仍然不是回文串

  • 至多有一个字符的个数是奇数的字符串可以组成回文串

面试热题(最长回文子串)_第4张图片

       今天我们用的方法时暴力枚举+中心扩散方法,通俗的来说就是枚举字符串中每一个字符作为回文串中心的情况,然后取最max的一种情况作为我们的结果

 for(int l=0;lres1.length()?max:res1;
           max=max.length()>res2.length()?max:res2;
       }

在回文串中,我们的中心字符可能是1个也有可能是2个,那这样我们应该怎么去表示?

面试热题(最长回文子串)_第5张图片

 

String res1=find(s,l,l);
String res2=find(s,l,l+1);

        我们的find函数的作用又是什么呢?不就是以中心字符为中心,去向两边扩展,找到最长的回文子串

回文中心只有一个字符

面试热题(最长回文子串)_第6张图片

 回文中心只有两个字符面试热题(最长回文子串)_第7张图片

public String find(String s,int left,int right){
        if(left>right){
            return "";
        }
        while(left>=0&&right

你可能感兴趣的:(热题Hot100,面试,职场和发展)