腾讯常考十道算法真题:最长回文子串

2022-03-2709:42:04数据结构与算法Comments834 views字数 941阅读模式

给你一个字符串 s,找到 s 中最长的回文子串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/23765.html

实例1:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/23765.html

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

这道题可以使用中心扩展法实现,从中间开始向两边扩散来判断回文串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/23765.html

for 0 <= i < len(s):
    找到以 s[i] 为中心的回文串
    更新答案

但是回文串可能是长度可能是奇数,也可能是偶数,因此需要加多一步:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/23765.html

for 0 <= i < len(s):
    找到以 s[i] 为中心的回文串
    找到以 s[i] 和s[i+1] 为中心的回文串
    更新答案

完整代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/23765.html

class Solution {
    public String longestPalindrome(String s) {

        if(s==null|| s.length()<2){
             return s;
        }

        String result ="";
        for(int i=0;i<s.length();i++){
            String r1 = subLongestPalindrome(s,i,i);
            String r2 = subLongestPalindrome(s,i,i+1);
            String tempMax= r1.length()>r2.length()? r1 :r2;
            result = tempMax.length()> result.length()?tempMax:result;
            
        }
        return result;

    }

    private String subLongestPalindrome(String s,int l,int r){
        while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
            l--;
            r++;
        }

        return s.substring(l+1,r);
    }
}
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/23765.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/suanfa/23765.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定