lc5最长回文子串「建议收藏」

lc5最长回文子串「建议收藏」publicclassSolution{publicStringlongestPalindrome(Strings){intlen=s.length();if(len<2){returns;}char[]charArray=s.toCharArray();//要的是回文子串而非仅仅要长度intmax..

大家好,又见面了,我是你们的朋友全栈君。

在这里插入图片描述
在这里插入图片描述

public class Solution { 
   

    public String longestPalindrome(String s) { 
   
        int len = s.length();
        if (len < 2) { 
   
            return s;
        }
        char[] charArray = s.toCharArray();
       
        //要的是回文子串 而非仅仅要长度
        int maxLen = 1;
        int begin = 0;
        
        // 初始化dp数组 dp[i][j] 表示 s[i..j] 是否是回文串
        boolean[][] dp = new boolean[len][len];
        // 初始化:所有长度为 1 的子串都是回文串
        for (int i = 0; i < len; i++) { 
   
            dp[i][i] = true;
        }

        // 递推开始
        // 先枚举子串长度 通过left和长度确定 左右边界
        for (int L = 2; L <= len; L++) { 
   
            // 枚举左边界,左边界的上限设置可以宽松一些
            for (int i = 0; i < len; i++) { 
   
                // 由 L 和 i 可以确定右边界,即 j - i + 1 = L 得
                int j = L + i - 1;
                // 如果右边界越界,就可以退出当前循环
                if (j >= len) { 
   
                    break;
                }
                //
                if (charArray[i] != charArray[j]) { 
   
                    dp[i][j] = false;
                } 
                else { 
   
                    if (j - i < 3) { 
   
                        dp[i][j] = true;
                    } 
                    else { 
   
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                }

                // 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置
                if (dp[i][j] && L > maxLen) { 
   
                    maxLen = L;
                    begin = i;
                }
            }
        }
        return s.substring(begin, begin + maxLen);
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163997.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ftp客户端软件,8款最受欢迎的ftp客户端软件

    对于ftp客户端软件,你了解多少?其实一般人也接触不到这种软件。ftp客户端软件主要是针对从事网站管理的工作人员比较有利的一款工具。可以帮助他们快速的解决工作中的问题。方便、简单、快捷又明了的解决问题,下面有六款ftp客户端软件的介绍。第一款:IIS7服务器管理工具这款工具是真的好用,童叟无欺的那种好用。在我心里它是排在中文版javaftp工具类中的榜首的。它不仅拥有每个javaftp工具类都具备的批量管理功能,还具备很多你意想不到的地方,比如定时同步(上传和下载)、多任务同时进行、定时备份还能够自

    2022年4月5日
  • Cinemachine初体验

    Cinemachine初体验一、安装可以直接从packagemanager里面安装(踩过的坑:导入samples时可能会出现sample和当前使用的unity版本不兼容的情况,更换版本即可)二、cinemachine使用说明场景中需要已存在一个unitycamera,然后在该相机上挂载CinemachineBrain组件(ps:如果不是在timeline中使用虚拟相机的话,这两个属性会决定多个虚拟相机之间切换的方式)或者直接使用cinemachine新建相机,这样会自动在原有的unitycamera上挂载Cinema

    2022年5月27日
  • iOS: 学习笔记, 透过Boolean看Swift(译自: https://developer.apple.com/swift/blog/ Aug 5, 2014 Boolean)

    iOS: 学习笔记, 透过Boolean看Swift(译自: https://developer.apple.com/swift/blog/ Aug 5, 2014 Boolean)

    2021年12月4日
  • java 卸载工具_java卸载工具下载

    java 卸载工具_java卸载工具下载java怎样完全卸载?怎么彻底删除java?有些用户的系统上会自带java程序,或者是因为安装了什么软件导致java一起安装了,那这个时候怎么将java卸载呢?不清楚的用户,看看小米小编为大家推荐的一款非常好用的java卸载工具。软件介绍java卸载器是一款java完全卸载工具,当你的java出现了故障需要卸载重装的话,就可以使用这个软件完全卸载掉java的所有文件,可以完美解决java卸载不了、…

    2022年5月20日
  • linux下的定时任务,Crontab用法

    linux下的定时任务,Crontab用法linux下的定时任务,Crontab用法

    2022年4月24日
  • Ubuntu20.04安装中文输入法

    Ubuntu20.04安装中文输入法新装了ubuntu20.04的系统,由于装系统时,选择安装了英文的版本,因此系统没有中文输入法,此时我想加入中文输入法。在设置-语言中怎么改都没有用。最终用下面方法解决了安装中文语言包**由于我装系统时,选择了安装English版本,所以先安装了一下中文语言包。sudoapt-getupdatesudoapt-getinstalllanguage-pack-zh-hans安装输入法sudoaptinstallibus-libpinyinsudoapti

    2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号