查找重复代码[A卷-hw_od]
题目描述
小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码。 重复代码查找方法:以字符串形式给定两行代码(字符串长度 1 < length <= 100,由英文字母、数字和空格组成),找出两行代码中的最长公共子串。 注:如果不存在公共子串,返回空字符串
输入描述
输入的参数text1, text2分别表示两行代码
输出描述
输出任一最长公共子串
用例1
输入:
hello123world
hello123abc4
输出:
hello123
用例2
输入:
private_void_method
public_void_method
输出:
_void_method
用例3
输入:
hiworld
hiweb
输出:
hiw
代码如下(C++版):
#include <bits/stdc++.h>
using namespace std;string solve(const string &s1, const string &s2) {int m = s1.size(), n = s2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));int maxLen = 0, endIdx = 0; //维护最大长度和终止索引for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (s1[i - 1] == s2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;if (dp[i][j] > maxLen) {maxLen = dp[i][j];endIdx = j;}}}}return (maxLen > 0) ? s1.substr(endIdx - maxLen, maxLen) : "";
}int main() {string s1, s2;getline(cin, s1);getline(cin, s2);string res= solve(s1, s2);cout << res << endl;return 0;
}
记忆化搜素(C++):
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> memo;
int maxLen = 0, endIdx = 0;
int dfs(const string &s1, const string &s2, int i, int j) {if (i < 0 || j < 0) return 0;if (memo[i][j] != -1) return memo[i][j];if (s1[i] == s2[j]) {memo[i][j] = dfs(s1, s2, i - 1, j - 1) + 1;if (memo[i][j] > maxLen) {maxLen = memo[i][j];endIdx = i + 1;}} else {memo[i][j] = 0;}return memo[i][j];
}string solve(const string &s1, const string &s2) {int m = s1.size(), n = s2.size();memo.assign(m, vector<int>(n, -1));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dfs(s1, s2, i, j);}}return (maxLen > 0) ? s1.substr(endIdx - maxLen, maxLen) : "";
}int main() {string s1, s2;getline(cin, s1);getline(cin, s2);string res= solve(s1, s2);cout << res << endl;return 0;
}
JAVA版:
import java.util.*;
class solve {public String LongestPublicSubstr(String s1, String s2) {int m = s1.length(), n = s2.length();int[][] dp = new int[m + 1][n + 1];int maxLen = 0, endIdx = 0;for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (s1.charAt(i - 1) == s2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1] + 1;if (dp[i][j] > maxLen) {maxLen = dp[i][j];endIdx = i;}}}}return (maxLen > 0) ? s1.substring(endIdx - maxLen, endIdx) : "";}
}
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s1 = sc.nextLine();String s2 = sc.nextLine();solve res=new solve();System.out.println(res.LongestPublicSubstr(s1, s2));}
}
记忆化搜素(JAVA):
import java.util.*;public class Main {private static int[][] memo;private static int maxLen = 0, endIdx = 0;public static int dfs(String s1, String s2, int i, int j) {if (i < 0 || j < 0) return 0;if (memo[i][j] != -1) return memo[i][j];if (s1.charAt(i) == s2.charAt(j)) {memo[i][j] = dfs(s1, s2, i - 1, j - 1) + 1;if (memo[i][j] > maxLen) {maxLen = memo[i][j];endIdx = i + 1;}} else {memo[i][j] = 0;}return memo[i][j];}public static String solve(String s1, String s2) {int m = s1.length(), n = s2.length();memo = new int[m][n];for (int[] row : memo) Arrays.fill(row, -1);for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dfs(s1, s2, i, j);}}return (maxLen > 0) ? s1.substring(endIdx - maxLen, endIdx) : "";}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s1 = scanner.nextLine();String s2 = scanner.nextLine();System.out.println(solve(s1, s2));}
}
练习链接:1143. 最长公共子序列 - 力扣(LeetCode)
1.上面提供的是LeetCode的练习题,都属于线性DP的类型
2. 本题思路: 上面提供了记忆化搜索和递推的写法
状态定义:dp[i][j]表示以i,j的结尾的最长子串
考虑边界: dp[0][0]=0, dp[m][n]=答案
状态转移: 如果当前s[i]==s[j] , dp[i][j]=dp[i-1][j-1]+1 否则dp[i][j]=0
维护数据: 维护一个结尾索引i/j
注:如果使用的记忆化的解法,memo数组一定不要初始化成0,建议初始化成-1.
如果题目很难, 建议使用记忆化搜索, 但是常见的背包/线性DP之类的题目, 建议直接使用递推
对代码有不理解地方可以直接发到评论区
相关文章:
查找重复代码[A卷-hw_od]
题目描述 小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码。 重复代码查找方法:以字符串形式给定两行代码(字符串长度 1 < length < 100,由英文字…...
HAl库开发中断方式接收Can报文的详细流程
下面给出一个基于 HAL 库的中断方式接收 CAN 报文的详细流程说明,描述每一步的硬件配置、软件调用和中断处理机制,而不涉及具体代码细节,只讲解整体原理和步骤: 在使用 HAL 库时,不需要手动清除中断标志位。原因如下&…...
[笔记] TinyWebServer编译及demo运行过程
文章目录 前言环境搭建ubuntumysql 8.0c/c开启root用户TinyWebServer 搭建及编译过程运行结果常见问题./threadpool/../CGImysql/sql_connection_pool.h:6:10: fatal error: mysql/mysql.h: No such file or directory./server运行后直接退出了 前言 哎 也就帮帮新手看看问题 …...
基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 互联网技术的成熟和普及,势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营,互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容,再加上电影行业的发展,如此繁荣吸引…...
基于Redis分布锁+事务补偿解决数据不一致性问题
基于Redis的分布式设备库存服务设计与实现 概述 本文介绍一个基于Redis实现的分布式设备库存服务方案,通过分布式锁、重试机制和事务补偿等关键技术,保证在并发场景下库存操作的原子性和一致性。该方案适用于物联网设备管理、分布式资源调度等场景。 …...
虚拟电商-延迟任务系统的微服务改造(二)注册中心和Feign调用
一、微服务注册中心Consul 编写完延迟任务系统的web层接口,也就是说可以基于http协议来访问延迟系统,接下来要将延迟任务改造成一个服务。首要考虑的问题就是服务的注册与发现,服务的注册与发现都离不开服务的注册中心,本项目选取…...
数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记
一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…...
人工智能在智能交通中的应用:以L4级无人电动物流拖车为例
一、引言 人工智能(AI)技术的飞速发展正在深刻改变各个行业,其中智能交通领域尤为显著。从自动驾驶汽车到智能交通管理系统,AI的应用不仅提高了交通效率,还增强了安全性。本文将重点探讨L4级无人电动物流拖车技术及其在…...
【愚公系列】《高效使用DeepSeek》024-儿童教育
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
第十六届蓝桥杯康复训练--6
题目链接:790. 数的三次方根 - AcWing题库 思路:二分,注意正负号和小数判断退出的方法(虽然正负无所谓) 代码: #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…...
【QA】单件模式在Qt中有哪些应用?
单例设计模式确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。在 Qt 框架中,有不少类的设计采用了单例模式,以下为你详细介绍并给出相应代码示例。 1. QApplication QApplication 是 Qt GUI 应用程序的核心类,每个 Q…...
logisim安装以及可能出现的问题
阅读提示:我这篇文章更偏向于安装出现问题的解决方案 目录 一、安装步骤 二、安装问题 1、出错的问题 2、出错的原因与解决方法 一、安装步骤 1、下载logisim 官方网站:https://sourceforge.net/projects/circuit/ 下载适用于你操作系统的版本&…...
Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发
DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序,必须通过Servlet来处理 没有Servlet,java是无法处理web请求的 Web交互: 接收请求HttpServletRequest:可以获取到请求的信息,比如uri&#…...
2300年直线公理使数学一直存在尖锐自相矛盾
2300年直线公理使数学一直存在尖锐自相矛盾 黄小宁 复平面z各点z的对应点2z的全体是2z平面。z面拉伸(平移)变换为2z面(z2面)就使x轴⊂z面沿本身拉伸(平移)变换为u2x轴(ux2轴)。R可…...
hackmyvm-Icecream
arp-scan -l nmap -sS -v 192.168.222.106 enum4linux 192.168.222.106 445端口 smbmap -H 192.168.222.106 icecream为只读模式 smbclient \\192.168.222.106\icecream 反弹shell(上传put php-reverse-shell.php) 开启监听 nc -lnvp 1234 拿到webshell cat /etc/passwd 9000端…...
Apache Tomcat漏洞公开发布仅30小时后即遭利用
近日,Apache Tomcat曝出一项安全漏洞,在公开发布概念验证(PoC)仅30小时后,该漏洞即遭到攻击者利用。这一漏洞编号为CVE-2025-24813,主要影响以下版本: 1. Apache Tomcat 11.0.0-M1 至 11.0.2 …...
告别低效人工统计!自动计算计划进度
实时监控任务进度一直是项目管理中的一项巨大挑战。 人工统计方式不仅耗时耗力,而且往往由于信息传递的延迟和人为误差,导致无法实时获得准确的项目进展信息。 这种不准确性可能掩盖潜在的风险点,从而影响项目的整体进度和成果。 Ganttable …...
AI比人脑更强,因为被植入思维模型【16】反脆弱
毛选中就有言,不经历困难,我们就不会掌握战胜困难的方法。 这个世界纷繁复杂,不是强者总是运气好,而是他们能够失败后快速复原,不断找到战胜困难的方法。 定义 马斯洛需求层次模型是一种将人类需求从低到高按层次进…...
L2TP实验
放开安全策略机制,FW1不配IP [FW1]firewall zone trust [FW1-zone-trust]add interface GigabitEthernet 1/0/0 [FW1]security-policy [FW1-policy-security]default action permit FW2 和FW3 [FW2]interface g1/0/1 [FW2-GigabitEthernet1/0/1]ip address 2…...
【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】
文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 遗传算法GA2. 长短期记忆网络LSTM3. 基于GA-LSTM的光伏功率预测4. 部分代码展示5. 运行结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 …...
【记录一下】LMDeploy学习笔记及遇到的问题
LMDeploy 是一个用于大型语言模型(LLMs)和视觉-语言模型(VLMs)压缩、部署和服务的 Python 库。 其核心推理引擎包括 TurboMind 引擎和 PyTorch 引擎。前者由 C 和 CUDA 开发,致力于推理性能的优化,而后者纯…...
Ciura序列
一 概述 Ciura序列是一种用于希尔排序(Shell Sort)的高效增量序列。 由Marcin Ciura于2002年通过实验提出。 1)经验证最优的初始序列为:[1, 4, 10, 23, 57, 132, 301, 701] 2) 后续增量可通过最后一个元素乘以2.25生成(如:701*2.25=1577,1577*2.25=3548...)。 3)时…...
一、MySQL8的my.ini文件
MySQL8.0.11的安装版本my.ini配置文件默认存放在:C:/Program Files/MySQL/MySQL Server 8.0/ 目录下;而MySQL8.0.11绿色免安装版本是没有my.ini配置文件,用户可以自行构建后,再通过my.ini进行数据库的相关配置 一、MySQL8.0.11默…...
【贝叶斯定理(Bayesian Theorem)】
贝叶斯定理(Bayesian Theorem)是概率论中一个革命性的工具,它将主观信念与客观数据结合,形成了独特的贝叶斯统计体系。以下我们将从数学原理、哲学内涵、实际应用三个维度进行深度解析。 一、贝叶斯定理的数学本质 1. 核心公式的…...
HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述
这个是上一年的项目,之前弄得不怎么完整,只有一个openmv的,所以openmv自己去我主页找,这篇主要讲蓝牙 这个是我在使用openmv连接单片机1然后单片机1与单片机2通过蓝牙进行通信 最终实现的效果是:openmv识别到图形和数…...
如何在1分钟内编写Cursorrules
如何在1分钟内编写Cursorrules:Cursor AI用户的快速指南 编写Cursor AI的.cursorrules文件并不需要花费太多时间或显得复杂。无论你是希望定制AI编码助手的开发者,还是想确保团队编码标准一致,你都可以在短短一分钟内创建一个有效的.cursorr…...
Linux中mutex机制
在Linux中,mutex是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问或修改这些资源,从而避免竞态条件的发生。mutex 是“mutual exclusion”的缩写,意为“互斥”。 1. Mutex 的基本概念 互斥锁&…...
Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测
Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…...
AMD公司
本文来自腾讯元宝 AMD(Advanced Micro Devices, Inc.)(先进的微型计算机设备)是一家全球领先的半导体公司,成立于1969年,总部位于美国加利福尼亚州圣克拉拉。AMD 主要从事设计、开发和销售计算机处理器、图…...
数字证书 与 数字签名 介绍
目录 数字签名 什么时候公钥加密数据,什么时候私钥加密数据? 消息认证码(MAC)和数字签名 区别 数字证书 如何使用数字证书验证服务器身份? 数字签名 定义:它类似于现实生活中的手写签名。 手写签名的法律…...
