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


相关推荐

  • 芯片架构–四大处理器架构「建议收藏」

    芯片架构–四大处理器架构「建议收藏」处理器分为复杂指令集计算机(CISC)和精简指令集计算机(RISC)。1、x86架构我们使用的电脑以及公司的服务器,大部分采用了x86架构的处理器,以intel和AMD的处理器为主。x86架构的处理器采用了CISC指令集(复杂指令集计算机),x86架构的CPU分为x86和x86-64两类,目前主流的是x86-64,即64位的处理器。2、ARM架构我们的手机几乎全部使用了ARM架构,采用了RISC指令集(精简指令集),ARM的优势在于低功耗,因此非常适合手机等终端使用,x86架构的处理器无

    2022年9月7日
    0
  • iOS超全开源框架、项目和学习资料汇总–数据库、缓存处理、图像浏览、摄像照相视频音频篇…

    iOS超全开源框架、项目和学习资料汇总–数据库、缓存处理、图像浏览、摄像照相视频音频篇…

    2022年3月1日
    64
  • pytest的assert_assert是什么意思

    pytest的assert_assert是什么意思前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

    2022年7月30日
    3
  • J2ME开发初探

    J2ME开发初探摘要:本文是J2ME开发的入门性文章,从零开始介绍了进行J2ME开发首先需要了解的一些东西。阅读本文几乎不需要相关的基础知识。1.1.       J2ME简介J2ME是Java2Platform,MicroEdition的简称。它是SunMicrosystems公司在Java的品脾之下的四种平台之一,其他三种分别是J2SE,J2EE和JavaCard。J2ME的目标是消费

    2022年7月11日
    16
  • MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法

    MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法一、MySQL日期和时间戳的转换1.日期转时间戳selectUNIX_TIMESTAMP(‘2018-12-2512:25:00’);结果:15457119002.时间戳转日期:FROM_UNIXTIME(unix_timestamp)–unix_timestamp为时间戳selectFROM_UNIXTIME(1545711900);结果:2018-12-…

    2022年6月15日
    34
  • python win32api.shellexecute_socket send函数

    python win32api.shellexecute_socket send函数记事本的主窗口中还有一个窗口,您需要向它发送消息。您可以使用MicrosoftSpy++工具查看此“隐藏”窗口,也可以获取所有子窗口,如下所示:defcallback(hwnd,hwnds):ifwin32gui.IsWindowVisible(hwnd)andwin32gui.IsWindowEnabled(hwnd):hwnds[win32gui.GetClassName(hwnd…

    2022年10月11日
    0

发表回复

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

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