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

相关文章

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码可见字符(不包括回车)。

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],