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

字符串知识(LCS,LIS)区分总结归纳

‍ 关于作者会编程的土豆“不是因为看见希望才坚持而是坚持了才看见希望。”你好我是会编程的土豆一名热爱后端技术的Java学习者。正在更新中的专栏《数据结构与算法》《leetcode hot 100》《数据库mysql》作者简介后端学习者标准 LCS 模版二维 DP#includeiostream #includevector #includestring using namespace std; int LCS(string s1, string s2) { int n s1.size(), m s2.size(); // dp[i][j] 表示 s1前i个字符 与 s2前j个字符 的LCS长度 vectorvectorint dp(n 1, vectorint(m 1, 0)); for (int i 1; i n; i) { for (int j 1; j m; j) { if (s1[i - 1] s2[j - 1]) { // 字符相同从左上角1 dp[i][j] dp[i - 1][j - 1] 1; } else { // 字符不同取左边或上边的最大值 dp[i][j] max(dp[i - 1][j], dp[i][j - 1]); } } } return dp[n][m]; // 最终答案 }理解不了可以强行记住dp[i][j]的含义s1的前i个字符与s2的前j个字符的最长公共子序列长度情况 1字符相同s1[i-1] s2[j-1]说明当前字符可以加入公共子序列长度 之前状态dp[i-1][j-1] 1对应在表格中就是从左上角转移过来情况 2字符不同s1[i-1] ! s2[j-1]当前字符不能同时使用长度 从左边dp[i][j-1]或上边dp[i-1][j]继承最大值相当于跳过s1的当前字符或跳过s2的当前字符举例演示假设s1 abcdes2 aceDP 表格构建过程∅ace∅0000a0111b0111c0122d0122e0123例如#includeiostream #includevector #includealgorithm using namespace std; int main() { string s; cin s; int n s.size(); string t s; reverse(s.begin(), s.end()); vectorvectorintdp(n 1, vectorint(n1,0)); for (int i 1; i n; i) { for (int j 1; j n; j) { if (s[i - 1] t[j - 1]) { dp[i][j] dp[i - 1][j - 1] 1; } else { dp[i][j] max(dp[i - 1][j], dp[i][j - 1]); } } } cout n - dp[n][n] endl; return 0; }LIS最长上升子序列标准模版int lengthOfLIS(vectorint nums) { int n nums.size(); if (n 0) return 0; // tails[k] 表示长度为 k1 的上升子序列的最小末尾元素 vectorint tails; for (int x : nums) { // 在 tails 中找第一个 x 的位置 auto it lower_bound(tails.begin(), tails.end(), x); if (it tails.end()) { // x 比所有末尾都大可以延长最长子序列 tails.push_back(x); } else { // 替换掉第一个 x 的元素保持末尾尽可能小 *it x; } } return tails.size(); }两种情况情况操作含义it tails.end()tails.push_back(x)x比所有现有末尾都大可以延长最长上升子序列it ! tails.end()*it x找到一个比x大的末尾用x替换它让该长度的末尾更小变种输出具体序列vectorint getLIS(vectorint nums) { int n nums.size(); vectorint tails; // 记录最小末尾 vectorint pos(n); // pos[i] 记录 nums[i] 在 tails 中的位置 vectorint prev(n, -1); // prev[i] 记录 nums[i] 的前驱索引 for (int i 0; i n; i) { auto it lower_bound(tails.begin(), tails.end(), nums[i]); int idx it - tails.begin(); if (it tails.end()) { tails.push_back(nums[i]); } else { *it nums[i]; } pos[i] idx; if (idx 0) { // 找前一个位置的元素倒序遍历找 pos[j] idx-1 的第一个 for (int j i - 1; j 0; j--) { if (pos[j] idx - 1 nums[j] nums[i]) { prev[i] j; break; } } } } // 回溯构造 LIS vectorint result; int len tails.size(); for (int i n - 1; i 0; i--) { if (pos[i] len - 1) { int cur i; while (cur ! -1) { result.push_back(nums[cur]); cur prev[cur]; } reverse(result.begin(), result.end()); break; } } return result; }例如#includeiostream #includevector #includealgorithm using namespace std; int main() { vectorintarr; int x; while (cin x) { arr.push_back(x); } reverse(arr.begin(), arr.end()); vectorinttail; for (int i 0; i arr.size(); i) { int x arr[i]; auto it upper_bound(tail.begin(),tail.end(),x); if (it tail.end()) { tail.push_back(x); } else *it x; } cout tail.size() endl; vectorinttaila; reverse(arr.begin(), arr.end()); for (int i 0; i arr.size(); i) { int x arr[i]; auto it lower_bound(taila.begin(), taila.end(), x); if (it taila.end()) { taila.push_back(x); } else *it x; } cout taila.size() endl; return 0; }lower_bound找第一个 x的位置。用于严格递增子序列。upper_bound找第一个 x的位置。用于非严格递增允许相等子序列。

相关文章:

字符串知识(LCS,LIS)区分总结归纳

👨‍💻 关于作者:会编程的土豆 “不是因为看见希望才坚持,而是坚持了才看见希望。” 你好,我是会编程的土豆,一名热爱后端技术的Java学习者。 📚 正在更新中的专栏: 《数据结构与算…...

TimeSformer在MMAction2里跑Kinetics400,我的显卡显存不够怎么办?优化与调参实战

TimeSformer在MMAction2中训练Kinetics400的显存优化实战指南 当我在实验室的RTX 3090上首次尝试用TimeSformer训练Kinetics400时,显存不足的报错让我意识到——Transformer类模型对硬件的要求确实苛刻。经过两周的反复试验和参数调整,我总结出一套针对…...

从调频到测速:图解FMCW雷达Chirp参数设计原理(含TI MMIC避坑指南)

从调频到测距:FMCW雷达Chirp参数设计的工程实践 毫米波雷达技术正在重塑自动驾驶和工业传感领域,而调频连续波(FMCW)雷达凭借其独特的优势成为主流选择。作为雷达系统的核心,Chirp参数设计直接决定了系统性能边界。本文…...

用Python和FastMCP为AI助手打造专属文档搜索工具:从本地Stdio到云端SSE部署全流程

用Python和FastMCP构建AI文档搜索引擎:从本地到云端的智能解决方案 在AI编程助手日益普及的今天,开发者们面临一个共同挑战:如何让这些助手准确理解并回答特定技术框架的问题?传统方法依赖静态知识库,但技术文档更新频…...

VinXiangQi:5分钟掌握免费象棋AI助手的终极完整指南

VinXiangQi:5分钟掌握免费象棋AI助手的终极完整指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 想在象棋对弈中获得专业级的AI辅助分析吗&…...

好写作AI:科研绘图的“同声传译”,把数据方言翻译成学术普通话

你有没有过这种体验:跑了一周的实验数据终于出来了,你看着密密麻麻的数字,心里知道“这个东西很有意思”,但一张嘴就变成了“由图1可见…由图2可见…”,像极了一个不会说外语的游客,指着菜单上的图片点餐—…...

从零到一:ESP-Drone开源无人机终极开发指南

从零到一:ESP-Drone开源无人机终极开发指南 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone 你是否曾经梦想亲手打造一架属于自己的智能无人机…...

用对高级检索,效率翻倍!以CV/NLP热点为例,详解四大顶刊数据库的精准文献挖掘术

用对高级检索,效率翻倍!以CV/NLP热点为例,详解四大顶刊数据库的精准文献挖掘术 在计算机视觉(CV)和自然语言处理(NLP)领域,每天都有大量新研究涌现。对于专注于特定技术方向的研究者…...

Harness CD + GitOps 架构师级实践:Canary 部署与多云交付

本文深入解析企业级 Harness CD(持续交付)与 GitOps 的高级架构设计原则与实践。作为 Harness 平台工程系列文章的第三篇,本文聚焦于服务/环境抽象模型、Canary + Progressive Delivery 策略、多云交付架构以及 GitOps at Scale 的设计考量,帮助架构师构建生产级的软件交付…...

【实战解决】Gazebo启动卡顿问题:从‘Preparing your world‘到流畅运行

1. Gazebo启动卡顿问题解析 第一次打开Gazebo时,很多人都会遇到卡在"Preparing your world"界面的情况。这个问题特别常见,尤其是刚接触ROS和Gazebo的新手。我自己刚开始用Gazebo时也遇到过,等了十几分钟都没反应,差点以…...

Harness 安全左移 + CCM + AI 增强:企业级交付平台终极指南

本文深入解析 Harness 在安全左移、云成本管理以及 AI 增强交付领域的核心能力。作为 Harness 平台工程系列文章的第五篇,本文聚焦于 Security Testing Orchestration(STO)、Cloud Cost Management(CCM)FinOps 优化以及 AI 原生化的 DevOps 能力,帮助企业构建安全、成本可…...

芝加哥伊利诺伊大学等机构联合破解AI语言模型生成困局

这项由芝加哥伊利诺伊大学、清华大学、MBZUAI以及麦吉尔大学联合开展的研究发表于2026年,论文编号为arXiv:2604.00375v1,为解决人工智能语言模型在文本生成中面临的质量与探索平衡难题提供了突破性解决方案。当我们使用ChatGPT或其他AI写作工具时&#x…...

Zynq裸机调试RTL8211FS网口,从ping不通到ping通的踩坑与填坑记录

Zynq裸机调试RTL8211FS网口的深度排错指南 当你在Zynq平台上第一次尝试让RTL8211FS PHY芯片工作时,可能会遇到一个令人沮丧的现象——网口指示灯亮了,但就是ping不通。这不是简单的驱动适配问题,而是一场需要耐心和系统思维的硬件调试之旅。 …...

人工智能伦理算法偏见与可解释性

人工智能伦理算法偏见与可解释性:技术背后的隐忧与挑战 在人工智能技术飞速发展的今天,算法已渗透到金融、医疗、司法等关键领域,但其决策过程往往像“黑箱”一样难以理解。更令人担忧的是,算法可能隐含性别、种族等偏见&#xf…...

荷兰独立研究者发现机器通过“聊天“自主发现看不见的物理规律

这项由荷兰阿姆斯特丹独立研究者Tomek Kaszyński完成的研究发表于2026年3月,论文编号为arXiv:2604.03266v1,研究成果令人惊叹地展示了人工智能如何通过"聊天"的方式自主发现那些我们肉眼看不见的物理规律。当我们观看一个球从斜坡上滚下来时&…...

深入剖析 memblock:Linux 内核早期内存管理的核心机制

1. memblock:Linux内核启动时的"临时工" 刚接触Linux内核开发的朋友可能会好奇:在系统启动的最初阶段,伙伴系统(Buddy System)还没准备好接管内存管理时,内核是如何分配内存的?这就不…...

2026年OpenClaw(Clawdbot)阿里云/本地喂饭级安装、配置大模型Coding Plan及使用步骤【最全】

2026年OpenClaw(Clawdbot)阿里云/本地喂饭级安装、配置大模型Coding Plan及使用步骤【最全】。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程&#xff0c…...

C# 结合pcap驱动实现EtherCAT主站开发实战

1. 为什么选择C#开发EtherCAT主站? 提到工业通信协议开发,很多人第一反应就是C/C。确实,像SOEM、IGH这些主流EtherCAT主站都是用C语言开发的。但作为一个长期在工业自动化领域摸爬滚打的开发者,我发现用C#开发EtherCAT主站有几个独…...

2026年OpenClaw(Clawdbot)本地环境4分钟本地喂奶级部署及使用流程【亲测】

2026年OpenClaw(Clawdbot)本地环境4分钟本地喂奶级部署及使用流程【亲测】。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服…...

Matlab与CarSim联合仿真:基于三自由度车辆模型搭建EKF/UKF与积分法融合测量质心...

matlab和carsim联合仿真,基于三自由度车辆模型,搭建ekf或者ukf与积分法融合的用于测量质心侧偏角,纵向速度,横摆角速度。 清晨六点半的实验室键盘声格外清脆,我盯着屏幕里那辆在CarSim里蛇形走位的虚拟高尔夫&#xf…...

从理论到实践:共射极放大电路的设计与调试全攻略

1. 共射极放大电路的核心原理 共射极放大电路之所以被称为"电子工程师的必修课",关键在于它完美展现了晶体管放大的本质。想象一下,你正在用麦克风唱歌,但声音太小无法让全场听到——这时候就需要一个"声音放大器"。共射…...

自动化编译VTK库:用CMake脚本一键搞定源码下载、编译与集成

自动化编译VTK库:用CMake脚本一键搞定源码下载、编译与集成 在大型可视化项目开发中,VTK(Visualization Toolkit)作为行业标准的科学计算可视化库,其环境配置往往成为团队协作的瓶颈。传统手动编译方式不仅耗时费力&am…...

突破微信OAuth2.0单回调域名限制的实战方案

1. 微信OAuth2.0单回调域名限制的痛点 做过微信网页开发的同行应该都遇到过这个经典问题:在微信公众平台配置网页授权域名时,一个公众号只能设置一个回调域名。这个限制对于单一应用场景影响不大,但当我们需要同时运营多个子站点或微官网时&a…...

Qt原子变量避坑指南:从QAtomicFlag到QAtomicPointer,这些内存顺序和ABA问题你搞明白了吗?

Qt原子变量深度避坑指南:从内存顺序到ABA问题的实战解析 在Qt多线程开发中,原子变量就像一把双刃剑——用得好可以大幅提升性能,用不好则会引入难以调试的幽灵问题。上周团队就遇到一个典型案例:在ARM服务器上运行良好的无锁队列&…...

CSS如何在开发环境下自动热更新样式_配置webpack-dev-server

要让 CSS 热更新生效,必须同时启用 HMR(devServer.hot: true)、使用 style-loader(非 MiniCssExtractPlugin.loader)处理 CSS、且开发环境禁用 MiniCssExtractPlugin。webpack-dev-server 怎么配才能让 CSS 热更新生效…...

UniApp打包小程序,从‘巨无霸’到‘苗条身材’的完整瘦身方案(HBuilderX CLI双版本指南)

UniApp打包小程序,从‘巨无霸’到‘苗条身材’的完整瘦身方案(HBuilderX & CLI双版本指南) 在移动互联网时代,小程序因其轻量级特性而广受欢迎,但这也意味着对包大小的严格限制。当UniApp项目逐渐壮大&#xff0c…...

一篇 EI 论文从初稿到录用,我复盘了全过程

很多同学第一次投 EI 会议都很慌:不知道论文要写到什么程度、格式怎么改、审稿人会问什么、被拒了怎么办。这篇就把我从 0 初稿→返修→录用的完整流程完整复盘一遍,不搞玄学、不讲空话,全程可照抄执行,适合第一次冲 EI 的硕博生直…...

PKHeX自动合法性插件:告别繁琐验证,拥抱智能数据管理

PKHeX自动合法性插件:告别繁琐验证,拥抱智能数据管理 【免费下载链接】PKHeX-Plugins Plugins for PKHeX 项目地址: https://gitcode.com/gh_mirrors/pk/PKHeX-Plugins 你是否曾为宝可梦数据的合法性验证而烦恼?面对复杂的个体值、技能…...

Win11 更新后卡顿 / 异常?官方教程教你安全卸载更新(附视频)

不少联想电脑用户在升级 Win11 系统更新后,会遇到电脑卡顿、软件闪退、驱动异常、续航变差等问题,即便重启也无法改善,严重影响日常办公与使用体验。面对这类情况,很多用户不知道如何正确回退系统更新,要么盲目操作导致…...

IJIS投稿实战:从Latex排版到审稿回复的保姆级避坑指南

IJIS投稿实战:从LaTeX排版到审稿回复的避坑指南 第一次向IJIS(International Journal of Intelligent Systems)投稿时,我踩遍了从模板选择到审稿回复的所有坑。这篇指南将分享如何避开这些陷阱,让你的投稿过程更加顺畅…...