首页 > 其他分享 >每日一题9

每日一题9

时间:2023-03-04 22:11:27浏览次数:37  
标签:begin int 每日 len maxLen 一题 dp 回文

每日一题9

题目:5. 最长回文子串

思路:dp

image-20230304215623743

image-20230304215641650

public class Solution {

    public String longestPalindrome(String s) {
        int len = s.length();
        if (len < 2) {
            return s;
        }

        int maxLen = 1;
        int begin = 0;
        // dp[i][j] 表示 s[i..j] 是否是回文串
        boolean[][] dp = new boolean[len][len];
        // 初始化:所有长度为 1 的子串都是回文串
        for (int i = 0; i < len; i++) {
            dp[i][i] = true;
        }

        char[] charArray = s.toCharArray();
        // 递推开始
        // 先枚举子串长度
        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] && j - i + 1 > maxLen) {
                    maxLen = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substring(begin, begin + maxLen);
    }
}

标签:begin,int,每日,len,maxLen,一题,dp,回文
From: https://www.cnblogs.com/ZLey/p/17179313.html

相关文章

  • 每日算法 230304
    每日算法230304题目982.按位与为零的三元组给你一个整数数组nums,返回其中按位与三元组的数目。按位与三元组是由下标(i,j,k)组成的三元组,并满足下述全部条......
  • 每日打卡
    importjava.util.ArrayList;importjava.util.Scanner;publicclasstest{staticScannersc=newScanner(System.in);publicstaticvoidmain(String[]arg......
  • 每日总结
    今天开发了记事本plus版本,可以实现增删改查,并且联合listview控件去显示,学到到listview需要适配去去解析页面熟悉了页面跳转的时候消息传递的妙处,也了解到许多未曾用到的函......
  • 3.5每日总结
    标准数据类型在内存中存储的数据可以有多种类型。例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。Python定义了一些标准类型,用于存储各种类型的数据。Py......
  • Android学习-每日打卡APP-实现每日打卡
    继续写我的打卡APP-完成了每日打卡的功能,其实还是比较简单,因为和注册一样都是插入的过程同时还能实现自动计数的功能,把坚持天数自动计算出来,打卡后插入数据库效果,可以看......
  • Android-每日打卡APP-实现登录功能
    每日打卡APP新的进展-实现登录功能-昨天已经把注册功能实现了,今天也很快把登录功能做了出来,然后接着着手做其他功能,打卡功能写在下一篇博客能够实现登录和注册,注册相关的......
  • 每日算法 230303
    每日算法230303题目1487.保证文件名唯一给你一个长度为n的字符串数组names。你将会在文件系统中创建n个文件夹:在第i分钟,新建名为names[i]的文件夹。由于两......
  • 每日打卡
    MySQL表的增删改查(基础)1.新增(Create)1.1单行数据+全列插入1.2多行数据+指定列2.查询(Retrieve)2.1全列查询2.2指定列查询2.3查询字段为表达式2.4别名2.5去重......
  • Android学习-每日打卡APP-进展
    今天课比较多,但是还是要抽出时间写安卓,又有了一些小进展,将数据库的部分代码写了出来可以参考一下packagecom.example.clockappliction;importandroid.content.Conte......
  • 2022.3.3每日总结
    HashSet基于HashMap来实现的,是一个不允许有重复元素的集合。HashSet允许有null值。HashSet是无序的,即不会记录插入的顺序。HashSet不是线程安全的,如果多个线程......