当前位置: 首页 > news >正文

牛客题目解析

一.最长回文子串

1.题目:给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。

最长回文子串__牛客网

2.算法原理:

<1>动态规划算法:O(n^2),O(n^2) 具有通性,凡涉及回文子串的问题都可利用此法解决

知识储备:对与只有一个字符的字符串一定是回文串;对于有两个字符的字符串当两个字符相等时,才是回文串;当字符串的长度大于2时,若该字符串是回文串则去掉首尾两个字符后仍是回文串。

创建一个n*n的dp表,统计[i,j]区间段内的子串是否是回文串。当i<j时,dp[i][j]=0;当i==j时,dp[i][j]==1;当j-i==1时,判断str[i]和str[j]是否相等;当j-i>1时,若str[i]==str[j],则判断dp[i+1][j-1]是否为1,若str[i]!=str[j],则dp[i][j]=0

注意:要是按照常规思维,利用字符串的长度两次循环的话,会出现判断dp[3][6]需要去看dp[4][5]的情形,而dp[4][5]还没有进行计算的情况,所以我们可以利用首尾字符间的距离作为第一层循环的自变量,从而避免访问还未判断位置的信息的情况


int getLongestPalindrome(string A) {int n=A.size();vector<vector<int>> r(n,vector<int>(n));int back;//创建矩阵在r中保存当前r[i][j]是否是回文子串,判定的依据为r[i+1][j-1]==1且A[i]==A[j]for(int d=0;d<n;d++)//d:两者间的间距{for(int i=0;i<n-d;i++){int j=i+d;if(d==0)r[i][j]=1;else if(d==1)r[i][j]=(A[i]==A[j]);elser[i][j]=(A[i]==A[j]&&r[i+1][j-1]==1);if(r[i][j]&&d+1>ret.size()){back=j-i+1;}}}return back;

<2>马拉车算法:O(n),O(n)  不具有通性,只能用于解决这一种问题

此种算法思想小编暂时还没有掌握,后续若是掌握了会在评论区介绍的,有兴趣的宝子可以自己尝试理解,要是学会了记得教小编一下

<3>中心扩展算法:O(n^2),O(1)

遍历字符串,以拿到的字符str[i]为回文子串的中心字符,然后利用两个指针left和right以str[i]为中心,分别向左右扩展,直至不符合str[left]!=str[right],更新回文子串的最长长度。

注意:因为回文子串的长度可以是奇数也可以是偶数,所以对于初始时left的赋值应该考虑left=i,和left=i-1两种情况

#include <iostream>
#include<string>
using namespace std;int main() {string str;cin>>str;//中心扩展算法int left=0,right=0,ret=0;for(int i=0;i<str.size();i++){//长度为奇数的回文串left=i-1;right=i+1;while(left>=0 && right<str.size() && str[left]==str[right]){left--;right++;}ret=max(ret,right-left-1);//长度为偶数的回文串left=i;right=i+1;while(left>=0 && right<str.size() && str[left]==str[right]){left--;right++;}ret=max(ret,right-left-1);}cout<<ret<<endl;return 0;
}

二.游游的水果大礼包(二元一次方程组的求解问题)

1.题目: 游游的水果大礼包__牛客网

游游有n个苹果,m个桃子。她可以把2个苹果和1个桃子组成价值a元的一号水果大礼包,也可以把1个苹果和2个桃子组成价值b元的二号水果大礼包。游游想知道,自己最多能组成多少价值总和的大礼包?

2.算法原理:

利用枚举法从0开始假设可以组成x个1号大礼包,x的取值范围为[0,min(n/2,m)],定下来1号礼包的个数,那么可以计算出2号礼包的个数,y=min(n-2*x,(m-x)/2),则礼包总值为a*x+b*y,在枚举过程中更新总值的最大值

3.代码实现:

#include <iostream>
using namespace std;int main() {long long n,m,a,b;cin>>n>>m>>a>>b;long long ret=0;for(long long x=0;x<=min(n/2,m);x++)//枚举1号礼包个数{long long y=min((n-2*x),(m-x)/2);//计算2号礼包个数ret=max(ret,a*x+b*y);}cout<<ret<<endl;return 0;
}

注:有些题目的数字类型要特别注意,否则可能会让测试结果就卡在70%左右非常恶心,建议对于可能取大值的数据一律定义long long类型,一了百了

三.两个链表的第一个公共节点

1.题目:两个链表的第一个公共结点_牛客题霸_牛客网

输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。

2.算法原理:

<1>常规思路:统计出两个链表的长度,让长的链表先走两链表差值步,再和另一链表开始一起向后走,当第一次碰到相同的节点时,则该节点就是第一个公共节点

注意:有可能在长链表走链表差步时,就已经达到第一个公共节点处,此情况不要忘记考虑

<2>等量关系:让cur1,cur2分别指向两链表的头节点,当cur1走到空时,让cur1指向另一个链表的头节点;同理,当cur2走到空时,让cur2指向另一个链表的头节点,让cur1==cur2时,所指向的节点就是第一个公共节点。

class Solution {
public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {if(pHead1==nullptr || pHead2==nullptr) return nullptr;ListNode* cur1=pHead1;ListNode* cur2=pHead2;while(cur1!=cur2){cur1=cur1==nullptr?pHead2:cur1->next;cur2=cur2==nullptr?pHead1:cur2->next;}return cur1;}
};

小小感慨一下,果然普通人是比不上天才的,这种思路绝对不是我这种普通人能想出来的🥲

四.Mari和shiny(多状态的动态规划问题)

1.题目:在一个字符串中找出"shy"的子序列

注:子串和子序列是不一样的,子串要求在原字符串中连续出现,但是子序列不要求连续出现,吐槽一句真恶心

2.算法原理:

利用数组统计在该字符前有多少个满足条件的选项。

创建shy数组统计该字符前有多少个“sh",若是str[i]=='y',则shy[i]=shy[i-1]+sh[i];若不等,则shy[i]=shy[i-1]

创建sh数组统计该字符前有多少个“s",若是str[i]=='h',则sh[i]=sh[i-1]+s[i];若不等,则sh[i]=sh[i-1]

创建s数组统计该字符前有多少个“s",若是str[i]=='s‘,则s[i]=s[i-1]+1;若不等,则s[i]=s[i-1]

注:可对本题做空间优化,即不创建数组直接利用三个变量统计

若str[i]=='s',则s++;若str[i]=='h',则h+=s;若str[i]=='y',则y+=h;

3.代码实现:

#include<iostream>
#include<string>
using namespace std;int main()
{string str;cin >> str;int s = 0, h = 0, y = 0;for (int i = 0; i < str.size(); i++){if (str[i] == 's') s++;else if (str[i] == 'h') h += s;else if (str[i] == 'y') y += h;}cout << y << endl;return 0;
}

zhu 

相关文章:

牛客题目解析

一.最长回文子串 1.题目&#xff1a;给定一个仅包含小写字母的字符串&#xff0c;求它的最长回文子串的长度。 最长回文子串__牛客网 2.算法原理&#xff1a; <1>动态规划算法:O(n^2),O(n^2) 具有通性&#xff0c;凡涉及回文子串的问题都可利用此法解决 知识储备&am…...

AG32的3个ADC可以并联使用吗

AG32的3个ADC可以并联使用吗&#xff1f; Customer: 需求&#xff1a; 在t1时间段&#xff0c;用5M的速度ch1通道采样得到结果1. 在t2时间段&#xff0c;用5M的速度ch2通道采样得到结果2. 在t3时间段&#xff0c;用5M的速度ch3通道采样得到结果3. 然后如此循环 。 考虑用3…...

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架&#xff0c;允许开发团队以单一、统一的格式生成、处理和传输遥测数据&#xff08;telemetry data&#xff09;。它由云原生计算基金会 (CNCF) 开发&#xff0c;旨在提供标准化协议和工具&#xff0c;用于收集…...

[vulnhub]DC:7

https://www.vulnhub.com/entry/dc-7,356/ 端口扫描主机发现 探测存活主机&#xff0c;178是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-03 13:30 CST Nmap scan report for 192.168.75.1 Host is up (0.00037s l…...

个性化十足的贵族服务器,惠普ML310e Gen8,服务器中的 “潘多拉魔盒”

个性化十足的贵族服务器&#xff0c;惠普ML310e Gen8&#xff0c;服务器中的 “潘多拉魔盒” 小伙伴们大家好呀&#xff0c;这里是勤奋的凯尔森同学&#xff0c;今天给大家分享一款好玩的服务器&#xff0c;惠普ML310e Gen8 V2&#xff0c;相比大家都很熟悉HP ProLiant MicroS…...

百度社招内推

百度社招内推 「百度内推」快来投递你心仪的职位吧&#xff08; 网申链接地址&#xff1a;https://dwz.cn/ah4OUcca&#xff09;&#xff0c;填入内推码&#xff0c;完成投递&#xff0c;get内推绿色通道~我的内推码&#xff1a;IZ9PVH 内推有什么好处&#xff1a; 简历直达…...

本地部署开源在线即时通讯软件Fiora打造个人私密聊天室

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 相信大家在聊天时候总是很没安全感&#xff0c;比如在和小姐妹背着男朋友聊一些不能说的坏话&#xff0c;或者背着女朋友和兄…...

TS(类 接口 泛型)

文章目录 类复习相关知识属性修饰符public 修饰符属性的简写形式 protected修饰符private修饰符readonly修饰符 抽象类 接口&#xff08;interface&#xff09;定义类结构定义对象结构定义函数结构接口之间的继承接口自动合并 &#xff08;可重复定义&#xff09;一些相似的概念…...

docker 启动 neo4j

docker 启动 neo4j 1. 启动2. 导入数据 1. 启动 运行下面命令启动 neo4j&#xff0c; docker run \-d \--restartalways \--publish7474:7474 --publish7687:7687 \--volume$HOME/neo4j-4.4.38/data:/data \--name neo4j-apoc-4.4.38 \-e NEO4J_dbms_allow__upgradetrue \-e …...

OPENAI官方prompt文档解析

官方文档地址:https://platform.openai.com/docs/guides/gpt-best-practices 文档中文版来源:OpenAI 官方提示工程指南 [译] | 宝玉的分享 (baoyu.io) 1.写清楚说明 如果prompt给的范围十分模糊或是过于宽泛,那么GPT就会开始猜测您想要的内容,从而导致生成的结果偏离预期. …...

【GESP】C++一级练习BCQM3092,双面打印

GESP一级知识点if分支语句和取余、整除操作练习。比较简单。 题目题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3092/ 【GESP】C一级练习BCQM3092&#xff0c;双面打印 | OneCoderGESP一级知识点if分支语句和取余、整除操作练习。比较简单。https://www.coderli.…...

mysql--多表查询

一、联合查询 作用&#xff1a;合并结果集就是把两个select语句的查询结果合并到一起&#xff01; 合并结果集有两种方式&#xff1a; UNION&#xff1a;合并并去除重复记录&#xff0c;例如&#xff1a;SELECT * FROM t1 UNION SELECT * FROM t2&#xff1b; UNION ALL&a…...

RHCE-Web-nginx http实验和nginx https实验

一、web服务器简介 &#xff08;1&#xff09;什么是www www 是 world wide web 的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户 所需要的信息。 www 可以结合文字、图形、影像以及声音等多媒体&#xff0c;并通过可以让鼠标单击超链接的…...

少儿编程学习现状洞察:青少年编程教育需求与学习频率分析

随着少儿编程教育的逐渐普及&#xff0c;越来越多的家庭开始关注孩子在编程学习中的表现。根据最新数据&#xff0c;90%的少儿编程学员保持每周至少一节课的学习频率&#xff0c;而95%的编程课程都安排在周末。特别是在8岁、10岁、12岁及15岁以上的年龄层次&#xff0c;孩子的学…...

接口集成、快速对接-阿里身份证实名认证接口

身份证实名认证接口现已被应用在联网的各种业务场景中&#xff0c;如电商、在线教育、银行等等&#xff0c;下面以电商平台为例&#xff0c;列举翔云身份证实名认证接口在电商平台中的具体应用和优势。 电商平台的出现方便了人们的生活&#xff0c;进行电商的实名认证有助于提高…...

HTTP、WebSocket、gRPC 或 WebRTC:各种协议的区别

在为您的应用程序选择通信协议时&#xff0c;有很多不同的选择。 本文将了解四种流行的解决方案&#xff1a;HTTP、WebSocket、gRPC 和 WebRTC。 我们将通过深入学习其背后原理、最佳用途及其优缺点来探索每个协议。 通信方式在不断改进&#xff1a;变得更快、更方便、更可靠&…...

Unity3D学习FPS游戏(8)装弹和弹夹UI显示

前言&#xff1a;实现了武器的基本发射功能&#xff0c;但是我们弹夹数量是有限&#xff0c;之前并没有做装弹和弹夹显示的功能。本篇实现装弹和弹夹显示。 装弹和弹夹UI显示 装弹目标思路和实现 弹夹UI显示目标弹夹UI的思路和实现UI代码的思路和实现 武器控制的完整代码效果补…...

Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管

自从多年前 JCenter 关闭服务之后&#xff0c;GSY 项目版本就一直发布在 Jitpack 上&#xff0c;如今每个月也都有大概 10w 左右下载&#xff0c;但是近年来时不时就会出现历史版本丢失的问题&#xff0c;而且有时候还不是某个具体版本丢失&#xff0c;而是版本里的某几个依赖突…...

火山引擎VeDI数据服务平台:在电商场景中,如何解决API编排问题?

01 平台介绍 数据服务平台可以在保证服务高可靠性和高安全性的同时&#xff0c;为各业务线搭建数据服务统一出口&#xff0c;促进数据共享&#xff0c;为数据和应用之间建立了一座“沟通桥梁”。 同时&#xff0c;解决数据理解困难、异构、重复建设、审计运维困难等问题&#x…...

【每日C/C++问题】

一、 结构体和联合体有什么区别&#xff1f;能否在声明过程当中缺省名字&#xff1f;&#xff08;需要写清楚使用方法&#xff09; 结构体的各个成员占用不同的内存空间&#xff0c;总大小是所有成员大小之和&#xff08;结构体字节对齐&#xff09;&#xff1a; typedef str…...

layaair做帧动画,等待一秒之后移动坐标,坐标位置明明相同,执行的时候却会抖动。

如下图&#xff1a;我将1秒后面的位置与0秒的坐标位置设置为一样&#xff0c;然后再第二秒的时候再设置位置移动。也就是想实现这个效果&#xff0c;小狗先停在这里一秒&#xff0c;然后再开始行走。现在的问题是停在这里依然抖动一下&#xff0c;也就是根本就停不住。还是会变…...

SAP分包业务中能否应用后继物料?

近期物流用户在工作中遇到新的问题。在分包业务中的原材料后继&#xff08;物料主数据设定非连续标识及后继物料&#xff09;不成功问题。对于未知应用&#xff0c;需要先研究期可行性&#xff0c;与问题或故障不同&#xff0c;如果系统本身就不支持&#xff0c;再多分析测试也…...

【数据结构】二叉树——判断是否为完全二叉树

一、思路 有完全二叉树的解释 我们想要判断二叉树是否为完全二叉树 我们可以用队列来实现 我们先将根节点入队列 再将根节点出队列&#xff0c;判断取出节点是否为空、 若不为空将该节点的左右节点入队列 左右节点为空也入队列 若为空则停止入队列 然后判断队列中是否有 NUL…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十. 多线程控制帧率。循环播放,QT connect 细节,

在前面&#xff0c;我们总结一下前面的代码。 在 FactoryModeForAVFrameShowSDL 构造函数中 init SDL。 通过 QT timerevent机制&#xff0c;通过startTimer(10);每隔10ms&#xff0c;就会调用timerEvent事件。 在timerEvent事件中&#xff0c;真正的去 读取数据&#xff0c…...

近百万奖金!2024 Web3.0 创新大赛重磅来袭!

10月30日&#xff0c;中国互联网协会与香港Web3.0协会共同组织举办的2024 Web3.0 创新大赛在上海举行启动会&#xff0c;宣布大赛正式在DataFountain竞赛平台&#xff08;简称DF平台&#xff0c;http://www.datafountain.cn&#xff09;启动上线。 大赛面向社会各界征集参赛团队…...

gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架

背景介绍 gRPC 是一种现代开源高性能远程过程调用 &#xff08;RPC&#xff09; 可以在任何环境中运行的框架。它可以有效地连接服务 在数据中心内和数据中心之间&#xff0c;具有对负载平衡、跟踪、 运行状况检查和身份验证。它也适用于最后一英里 分布式计算&#xff0c;用于…...

cmake系列-怎么构建不同的C++程序目标文件(可执行程序、动态库、静态库)

目录 生成可执行程序生成动态库生成静态库 我们编写的C代码不仅仅只是为了生成可执行程序&#xff0c;有的时候可能是为了生成动态库或者静态库&#xff0c;那么如果用cmake来构建的话&#xff0c;应该怎么做呢&#xff0c;怎么指定是生成可执行程序&#xff0c;还是生成动态库…...

使用ffmpeg和mediamtx模拟多通道rtsp相机

首先下载ffmpeg&#xff0c;在windows系统上直接下载可执行文件&#xff0c;并配置环境变量即可在命令行当中调用执行。 下载地址&#xff1a; https://ffmpeg.org/再在github上下载mediamtx搭建rtsp服务器&#xff0c;使用ffmpeg将码流推流到rtsp服务器。 下载地址&#xff1…...

windows系统类似于linux的nohup命令后台启动jar服务

一、首先新建一个后缀名为.bat文件 二、将jar包放在与jar包同一个路径下 三、编写.bat文件 echo off start javaw -Xms512m -Xmx1024m -XX:PermSize256m -XX:MaxPermSize512m -XX:MaxNewSize512m -jar xxxxx-22900.jar >> StartupLog.log 2>&1 & exit 四…...

2024 Rust现代实用教程 流程控制与函数

文章目录 一、if流程控制与match模式匹配1.流程控制2. IF流程控制3.match 表达式 二、循环与break continue以及与迭代的区别1.Rust中的循环Loops2.break && continue3.迭代4.循环与迭代的不同 三、函数基础与Copy值参数传递1.函数的基础知识2.Copy by value 四、函数值…...