Java实现算法之最大公共子序列

Android双目摄像头(RGB+IR)实时预览与人脸活体检测实战指南 本文详细介绍了Android双目摄像头(RGB+IR)实时预览与人脸活体检测的实战指南。通过双摄同步预览、人脸检测与活体判断等技术实现,提升安全认证的准确性和鲁棒性。文章还提供了开发环境搭建、常见问题解决方案及性能优化建议,帮助开发者快速掌握双目摄像头在Android平台的应用。 阅读详情

题目:

一个字符串A的子序列被定义成从A中顺次选出若干个字符构成的序列。如A=“cdaad" ,顺次选1,3,5个字符就构成子序列" cad" ,现给定两个字符串,求它们的最长公共子序列。

输入格式:第一行两个字符串用空格分开。

输出格式:最长序列的长度。

两个串的长度均小于2000

样例输入
abccd aecd
样例输出
3


思路:

这个题要用到动态规划,因此需要写出状态转移方程:


C[i,j]存放的就是最大公共子序列的长度,i和j分别是两字符串的下标。


代码:

package JAVAClass;

import java.util.Scanner;

public class MaxCommonSubSequence {

	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		String line=in.nextLine();
		String[]ss=line.split(" ");
		String line1=ss[0];
		String line2=ss[1];
		int length1=line1.length();
		int length2=line2.length();
		//System.out.println(findMax1(line1,line2));
		System.out.println(findMax(line1,length1-1,line2,length2-1));
	}
	//递归方法
	public static int findMax(String line1,int length1,String line2,int length2) {
		if(length1<0) {//递归出口,当小于0时,公共子序列长度为0
			return 0;
		}
		if(length2<0) {//递归出口,当小于0时,公共子序列长度为0
			return 0;
		}
		if(line1.charAt(length1)==line2.charAt(length2)) {
			return findMax(line1,length1-1,line2,length2-1)+1;
		}else {
			return Math.max(findMax(line1,length1-1,line2,length2),findMax(line1,length1,line2,length2-1));
		}
	}

	//非递归方法
	public static int findMax1(String line1,String line2) {
		int length1=line1.length();
		int length2=line2.length();
		int [][]num=new int[length1+1][length2+1];//这里二维数组要多创建一维,这是为了减少边界的判断条件。
		for(int i=0;i<length1;i++) {
			for(int j=0;j<length2;j++) {
				if(line1.charAt(i)==line2.charAt(j)) {
					num[i+1][j+1]=num[i][j]+1;//num[i+1][j+1]对应的是字符串中i和j对应的最大公共子序列长度
				}else {
					num[i+1][j+1]=Math.max(num[i][j+1],num[i+1][j]);
				}
			}
		}
		return num[length1][length2];
	}
}


第3章: MMU Interval Notifier 区间通知器的核心原理⭐ 摘要:区间级内存通知机制分析 本文分析了Linux内核中区间级内存通知机制(mmu_interval_notifier)的设计原理与实现。该机制针对传统全局通知(mmu_notifier)存在的性能开销大、无法精确控制等问题,通过引入区间树(Interval Tree)实现精确匹配,仅当内存变化与注册区间重叠时才触发回调。核心优势包括:1)O(log n + k)的高效查找性能;2)支持独立管理各内存区间;3)实现高并发处理不同区间的失效事件。 阅读详情

相关推荐

faster lio 回环 加入GTSAM优化的记录

对Faster lio 加入回环、gtsam优化,在室外建图遇到的问题和过程

Nico_jion的博客 2599

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 Input 第一行两个字

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 Input 第一行两个字符串用空格分开。 Output 最长子串的长度。# include # include using namespace std; int f[2010][2010]; cha

心在天涯 4251

FoundationPose实战:从零部署到Demo运行全记录

本文详细记录了FoundationPose从零部署到Demo运行的全过程,包括Ubuntu环境配置、项目部署、依赖安装及常见问题解决方案。特别针对复现过程中的关键步骤如CUDA版本选择、Eigen3安装等提供了实用技巧,帮助开发者高效完成FoundationPose的部署与调试。

weixin_27102543的博客 268

题目 1317: 最长公共子序列lcs

蓝桥杯

weixin_64443786的博客 931

ASP.NET Core Identity + Mysql(实战一)——注册登陆

在进行实战之前,我们先来了解一下Identity。 ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格、登录和用户数据存储。简单的来讲包括: 1.用户数据存储(使用任意你喜欢的关系型数据库,从sqllite到mysql、sqlserver等等,由Entity Framwork 支持) 2.登陆、注册外加身份认证(基于coo...

weixin_40359716的博客 1399

高德地图开放平台Web服务API调用全解析:从申请Key到获取POI数据的完整流程

本文详细解析高德地图开放平台Web服务API的合规使用流程,从开发者账号注册、Key类型选择到POI数据采集方案构建。重点介绍文本搜索接口的三种查询模式及高级筛选技巧,提供配额管理与性能优化方案,并分享商业应用场景实战经验,帮助开发者合法高效获取POI数据。

weixin_26950847的博客 1350

计蒜客 最长共公子串

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 输入格式:第一行两个字符串用空格分开。 输出格式:最长子串的长度。 两个串的长度均小于2000 样例输入 abccd aecd 样例输出 3 分析:dp求解,状态方程:dp[i]

持之以恒 1031

Carla-UE4Editor导入RoadRunner地图文件(保姆级教程)

以Carla官网导入RoadRunner地图的标准文档为参考,里面增添了很多细节和注意事项,遇到问题的小伙伴过来看看吧。

DSK_981029的博客 1万+

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 小王对既是素数又是回文的

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 小王对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 恺撒生活在充满危险和阴谋的时代. 恺撒面对的最

心在天涯 3762

MFC+Modbus-Tcp协议实现温湿度传感器采集

本文简单介绍MFC使用-Tcp通信实现系列MODBUSTCP型温湿度传感器采集数据。

zhigang_zhao的博客 2831

人工智能训练师三级考试备考全攻略|报名条件+真题+补贴申领一站式通关(2026版)

本专栏是人工智能训练师三级考证最完整的备考指南,共77篇文章,覆盖从职业认知、报名实操、AI基础知识、数据标注、模型训练测试部署、考前冲刺到考后进阶的全链路。本导读按模块整理了全部文章链接,帮你快速定位所需内容。人工智能训练师是国家认定的正式职业,证书可在osta.mohrss.gov.cn查询,三级证书可申领最高3120元技能补贴。

白话机器学习 1796

最长公共子串

一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad” ,顺次选1,3,5个字符就构成子串” cad” ,现给定两个字符串,求它们的最长共公子串。输入格式:第一行两个字符串用空格分开。输出格式:最长子串的长度。两个串的长度均小于2000样例输入abccd aecd 样例输出3import java.util.Scanner; public class Main {

qq_36442947的博客 577

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1553

算法学习之路:动态规划-最大公共子序列-java实现

最大公共子序列 public class LongestCommonSubsequence { public static void main(String[] args) { LongestCommonSubsequence lcs = new LongestCommonSubsequence(); String x = "helloword"; String y =

ldcctt的博客 217

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列

求解最大子序列、最长递增子序列(Longest Increasing Subsequence)、最长公共子串LCS 、最长公共子序列 最大子序列:找出由数组成的一维数组中和最大的连续子序列。 最长递增子序列(Longest Increasing Subsequence):设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=akm>,其中k1akm。求最大的m值。

1997

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

递归经典案例:在n个球中任意取出m个,有多少中取法 、 求 n个元素的全排列、 求两个串的最大公共子序列的长度

package digui; /** * @author : HuXuehao * @date : 2021年3月2日下午5:26:14 * @version : */ public class classical_case { /* * 一、在n个球中任意取出m个,有多少中取法 * 例如:从 abcd 4个球中取出 2 个球 * 所有情况举例:ab ac ad bc bd cd * 思路:从上述中我们可以发现,取出的球可以分为两个阵列,一个是含有a(也可以是其他)

✈ 正在努力 の 寒江(StudiousTiger) ✌ 呐 ✈ 491

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

赛前十天——打印输入字符串的全排列&&cls(java实现)

package javaPractice; import java.util.Scanner; public class Contest13 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); char[] s = sc.next().toCharArray(); arr...

Moliay的博客 520

编程题:最大字符串匹配

目录简介题目介绍思路代码及结果 简介 该题目为博主在面试中碰到的,因为觉得挺有意思故放上来以作留存记录。 题目介绍 求解给定字符串的最大匹配字符串。分两次输入,如输入"mynameiszhangsan"和"mynameislisi",结果输出"myname" 思路 题目的介绍其实很简单,但实现的过程还是稍微有点复杂,因为如果光考虑到匹配的问题,那么一个简单的数组匹配就能解决,但现在要求求最大匹配字符串,则在输入的字符串中要进行多次匹配,并且匹配次数不固定,相关的思路我代码中都有写,如有人有所看不懂的疑问请在

HATREDQAQ的博客 770

最长公共子序列(java)

输入 “hello” ,“heeo” 输出 heo public static void main(String[] args){ //两个测试串 String s1 = "hello"; String s2 = "hleeo"; System.out.println(maxPubLength(s1, s2)); } public static int maxPubLength(String s1,String s2

数据库 687

经典算法-递归-最长公共子序列

设x(i), y(i), z(i)表示单个字符,则X={x(1)x(2)……x(m)},Y={y(1)y(2)……y(n)},Z={z(1)z(2)……z(k)},我们称其为字符序列,其中m,n和k分别是字符序列X,Y,Z的长度,括号()中的数字被称作字符序列的下标。 如果存在一个严格递增而且长度大于0的下标序列{i1,i2……ik},使得对所有的j=1,2,……k,有x(ij)=z(j),那么我...

PROBIE_的博客 1873

最长公共子序列--算法设计与分析

public class LcsLength { //动态规划 public static void main(String[] args) { int []x= {1,2,3,5,6,7,8}; int []y= {4,5,6,7,8,9,10}; int m=x.length-1; int n=y.length-1; int [][]b=new int[10][10]; System.out.println("最大公共子序列长度为"+LcsLength(x,y,b)); .

weixin_59337031的博客 563

最大子序列、最长公共子串、最长公共子序列 [转]

最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到...

weixin_33859231的博客 84

java 递归求求两个串的最大公共子序列的长度

// 求两个串的最大公共子序列的长度 public class Main { public static int f(String s1, String s2) { if (s1.length()==0 || s2.length()==0) return 0; if (s1.charAt(0) == s2.charAt(0)) { return f(s1.substring(...

xckkcxxck的博客 783

最大子序列、最长公共子串、最长公共子序列

最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是{5,-3,4,2},它的和是8,达到最大;而{5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列。

starstarstone的专栏 394

最长公共子序列(非动规)

最长公共子序列 代码注释的比较详细易于理解,但程序的健壮性并不高。如果有同学看出bug可以提出来,谢谢 public class MCS_byme { public static int pos_i_MCS(char[] a,char[] b,int k) { //寻找该位置的最长公共子序列 /*寻找和a[i]相等的数,找到了就count+1,下一个元素从flag处找起。*/ int flag=0,count=0,j,i; for(i=k;i<a.length;i++) { fo

qq_46661297的博客 275

java-5 道经典算法题

通过定义状态数组 `dp` 并逐步计算子问题的解,可以高效地解决这个问题。由于我们只需要当前和前一个状态的值,因此可以使用两个变量而不是整个数组来保存状态,从而将空间复杂度降低到 O(1)。为了降低空间复杂度,可以使用滚动数组技术,只保存最近两行的状态,从而将空间复杂度从 O(m * n) 降低到 O(n)。为了进一步优化,可以考虑在每次递归时避免不必要的交换操作,并通过标记数组来记录哪些字符已经被使用,避免重复计算。使用动态规划的思路,可以进一步优化为只使用两个变量保存最近的两个结果,降低空间复杂度。

weixin_41247813的博客 1276
上一篇: Ubuntu17.04 环境下装WPS
下一篇: Java 中Synchronized 与 ReentrantLock 区别与联系
NFMSR
博客等级 码龄11年 59粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值