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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何学习PLC编程「建议收藏」

    如何学习PLC编程「建议收藏」plc是工业常用的自动化产品可编程控制器,它就相当于人类的大脑控制其他的器官,可编程控制器说白了就是个CPU,带几个模块,模块功能主要是,模拟量输入输出,数字量输入输出,其他功能计数模块。PLC在工业领域里扮演着重要的角色,作为一家企业或者个人应如何学习PLC呢?1.有一定的电工基础,掌握传感器、接近开关、编马器、气动元件等常用器件的使用及继电器控制原理。2.再学数制及数制转换,掌握二进制、八进制、十六进制、BCD码、ASCI码的概念。3.选择你所在地区流型的PLC品牌做为学习的机种,学会后可以更

    2022年10月19日
    0
  • Mysql explain-type使用详解

    Mysql explain-type使用详解下面是测试用例,楼主的测试使用的MySQL版本是5.6.27-log。show createtableuser_man;CREATETABLE`user_man`( `manid`bigint(20)NOTNULLAUTO_INCREMENT, `manname`varchar(32)DEFAULTNULL, `manage`int(6)DEFAULTNULL…

    2022年10月17日
    1
  • elemtype到底是个啥?

    elemtype到底是个啥?以前对这个东西的一知半解,今天有时间,查了多方面的资料,总结下:ElemType简单来说就是:用来更好的替代,他也可以叫做别的名字,比如说:#defineElemTypeint写程序,就可以用ElemType来进行替代int,若以后想要改Elemtype所定义的数据类型为char,直接#defineElemTypechar只要是其涉及到的全部修改了数据类型,可以修改最少量的代码,…

    2022年5月12日
    101
  • JAVA学习第四十七课 — IO流(一):文件的读写

    JAVA学习第四十七课 — IO流(一):文件的读写

    2022年2月2日
    38
  • Eclipse配置Maven详细教程[通俗易懂]

    Eclipse配置Maven详细教程[通俗易懂]一.使用eclipse自带的maven插件首先,现在下载EclipseMars之后的版本,基本上都自带了maven插件,无需自己再安装maven.有几个注意点:1.默认的本地仓库的目录是在C:\Users\viruser.v-desktop\.m2\repository\如果使用系统默认的maven插件,那么建议还是修改下本地仓库的路径,这样节省C盘空间2.使用的maven版…

    2022年5月25日
    36
  • 显示隐藏高德地图点标注的文本标签「建议收藏」

    显示隐藏高德地图点标注的文本标签「建议收藏」@[显示隐藏高德地图点标注的文本标签]效果如图欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你…

    2022年5月14日
    112

发表回复

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

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