NB15 牛群编号的回文顺序II

2024-04-26 01:12
文章标签 ii 顺序 回文 编号 牛群 nb15

本文主要是介绍NB15 牛群编号的回文顺序II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接

牛群编号的回文顺序II_牛客题霸_牛客网 (nowcoder.com)

一种可行的思路

这道题是 NB14 的升级, 大家可以看看我关于 NB 14 的题解NB14 牛群编号的回文顺序

先遍历链表, 将节点的值(1-9)用 StringBuffer 给存起来, 再用一个list来存每个节点

用动态规划来解题

然后再用 dp 来解题
填表的时候 更新最长回文子串的起始下标和结束下标

填完表后, 看看这个最长字串的长度是否和原来的链表一样长, 是就返回空

否则 把ist结束下标上的节点指向空

再返回起始下标上的节点

状态转移方程为:

dp[i][j] = dp[i + 1][j - 1] && strB[i] == strB[j] (i > j + 1)
dp[i][j] = true; (i = j)
dp[i][j] = strB[i] == strB[j] (i + 1 = j)

填表顺序

因为 (i + 1, j - 1) 在 (i, j) 的左下角, 而且 i 必然不大于 j 所以我们 从左上到右下 斜着填表

\>   \>\>   \>\>   \>

贴个代码

public class Solution {public ListNode maxPalindrome (ListNode head) {List<ListNode> list = new ArrayList<>();StringBuffer strB = new StringBuffer();int start = -1, end = -1;while (head != null) {strB.append(head.val);list.add(head);head = head.next;}int len = strB.length();int maxLen = 0;boolean[][] dp = new boolean[len][len];dp[0][0] = true;for (int k = 0; k < len; k++) {for (int i = 0; i + k < len; i++) {int j = i + k;if (i == j) dp[i][j] = true;else if (i + 1 == j) dp[i][j] = strB.charAt(i) == strB.charAt(j);else dp[i][j] = strB.charAt(i) == strB.charAt(j) && dp[i + 1][j - 1];if(dp[i][j] && j - i + 1 > maxLen) {start = i;end = j;    }}}if(end - start + 1 == list.size()) return null;list.get(end).next = null;return list.get(start);}
}

具体代码参上

好的!本次分享到这就结束了
如果对铁汁你有帮助的话,记得点赞👍+收藏⭐️+关注➕
我在这先行拜谢了:)

这篇关于NB15 牛群编号的回文顺序II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936306

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

csu1328(近似回文串)

题意:求近似回文串的最大长度,串长度为1000。 解题思路:以某点为中心,向左右两边扩展,注意奇偶分开讨论,暴力解即可。时间复杂度O(n^2); 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>#include<string>#inclu

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。