LeetCode1143最长公共子序列

题目描述

  给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

解析

  建立两个长度的动态规划数组,如果对应的字符相等,那么当前位置的最大值等于它斜上方的值加一,否则就是上方和左边的最大值。

class Solution {public int longestCommonSubsequence(String text1, String text2) {int len1 = text1.length();int len2 = text2.length();int[][] maxLen = new int[len1][len2];boolean equal = text1.charAt(0) == text2.charAt(0);// 初始化第一行for(int i = 0; i < len2; i++) {if(equal) {maxLen[0][i] = 1;}else {if(text1.charAt(0) == text2.charAt(i)) {equal = true;maxLen[0][i] = 1;}}}// 初始化第一列equal = text1.charAt(0) == text2.charAt(0);for(int i = 0; i < len1; i++) {if(equal) {maxLen[i][0] = 1;}else {if(text1.charAt(i) == text2.charAt(0)) {equal = true;maxLen[i][0] = 1;}}}for(int i = 1; i < len1; i++) {for(int j = 1; j < len2; j++) {int curMax = maxLen[i][j - 1];int preMax = text1.charAt(i) == text2.charAt(j) ? maxLen[i - 1][j - 1] + 1: maxLen[i - 1][j];int Max = Math.max(curMax, preMax);maxLen[i][j] = Math.min(Math.min(i + 1, j + 1), Max);}}return maxLen[len1 - 1][len2 - 1];}
}

  还可以进行优化,可以将数组的长度多建立一个,就不用初始化了,另外字符数组比直接使用string会快一点。

public int longestCommonSubsequence(String text1, String text2) {char[] t1 = text1.toCharArray();char[] t2 = text2.toCharArray();int length1 = t1.length;int length2 = t2.length;int[][] dp = new int[length1+1][length2+1];for (int i = 1; i < length1 +1; i++) {for (int j = 1; j < length2 +1; j++) {if (t1[i-1] == t2[j-1]){dp[i][j] = 1+ dp[i-1][j-1];}else {dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);}}}return dp[length1][length2];}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大厂真实面试题(一)

滴滴大数据sql 取出累计值与1000差值最小的记录 1.题目 已知有表t_cost_detail包含id和money两列,id为自增,请累加计算money值,并求出累加值与1000差值最小的记录。 2.分析 本题主要是想找到累加值域1000差距最小的记录,也就是我们要对上述按照id进行排序并且累加,并…

正则表达式----IP地址合法性判断

一、正则表达式常见匹配字符快速回顾 符号描述.匹配处换行符\n之外任意1个字符[]匹配[]中任意一个\d一个0-9数字\D匹配非数字\w匹配单词字符&#xff1a;a-z、A-Z、0-9\W匹配非单词字符\s匹配空格、tab健\S匹配非空格&#xff0c;tab健 常用的匹配规则-匹配字符数量 匹配前一个…

SQL注入二次注入

SQL注入是一种常见的网络攻击技术&#xff0c;它主要针对基于SQL语言的数据库系统。在Web应用程序中&#xff0c;如果开发者没有对用户输入进行适当的过滤或转义&#xff0c;攻击者就可以通过在输入字段中插入或“注入”SQL命令来操纵数据库&#xff0c;从而执行未授权的数据库…

【机器学习基础】Python编程06:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

婚恋网源码 相亲交友小程序源码

婚恋网源码 相亲交友小程序源码 1、婚恋相亲交友系统 超大型婚恋社交、相亲、征婚、互动系统&#xff0c;继承了此前O2O、SNS及B2C的优秀特点 2、媒婆推广返利系统 针对广大婚恋网站运营者而推出的一套共享返利婚恋模式&#xff0c;全民红娘&#xff0c;会员裂变式增长 3、…

VBA语言専攻通知20240608

通知20240608 各位学员∶本周MF系列VBA技术资料增加621-625讲&#xff0c;T3学员看到通知后请免费领取,领取时间6月7日晚上19:00-6月8日晚上20:00。本次增加内容&#xff1a; MF621:为组合框添加工作表数据 MF622:在代码中使用π值 MF623:在窗体上使用切换按钮 MF624:删除…

Windows下安装和配置Redis

目录 1、下载redis压缩包 2、解压redis文件 3、启动redis临时服务 4、打开Redis客户端进行连接 5、使用一些基础操作来测试 5.1、输入ping命令来检测redis服务器与redis客户端的连通性 5.2、使用set和get命令测试redis数据库进行数据存储和获取 5.3、在命令中通过shut…

一个程序员的牢狱生涯(56)开镣

星期二 开镣 省高院的人等大镣在最终判决书上签字后,安慰了几句大镣。郑所带领他们走出了内班。郑所在临走前吩咐严所安排给大镣卸下刑具,这也是重刑犯在法院由死刑改判为死缓后的规定。 大镣在省高院的人安慰下,也慢慢地不再哭泣。我和老杨在一边安慰着大镣,严所也站在一边…

忘记加await,返回结果undefined

今日bug记录&#xff0c;忘记加await&#xff0c;返回结果undefined 如果你通过 log(res) 得到的是一个 PromiseResult 对象&#xff0c;而在该对象中确实有一个名为 result 的数组&#xff0c;但是使用 log(res.result) 输出却是 undefined&#xff0c;可能是因为在 log(res.…

flowable 工作流从入门到精通

HelloWorld 语雀文档地址&#xff1a; https://www.yuque.com/paomian-ldog4/by12xp/uqg6yhhgzeinaxge#snmoq 相关文档 https://tkjohn.github.io/flowable-userguide/ 文档手册 https://github.com/flowable/flowable-engine/releases/tag/flowable-6.8.0 flowable-ui下载地…

将小爱音箱接入 ChatGPT 和豆包ai改造成专属语音助手

这个GitHub项目&#xff0c;mi-gpt&#xff0c;旨在将小爱音箱和米家设备与ChatGPT和豆包集成&#xff0c;有效地将这些设备转变为个性化语音助手。以下是对其功能和设置的详细分析&#xff1a; 主要特点 角色扮演&#xff1a;该项目允许小爱适应不同的角色&#xff0c;如伴侣…

【TB作品】MSP430F5529 单片机,简单电子琴

使用MSP430制作一个简单电子琴 作品功能 这个项目基于MSP430单片机&#xff0c;实现了一个简单的电子琴。通过按键输入&#xff0c;电子琴可以发出对应的音符声音。具体功能包括&#xff1a; 按下按键时发出对应音符的声音。松开按键时停止发声。支持C调低音、中音和高音。 …

【Java每日一题】1.和数最大操作

题目难度&#xff1a;简单 主要提升&#xff1a;&#xff08;1&#xff09;for循环思想&#xff08;2&#xff09;数组基本操作&#xff08;3&#xff09;问题拆解能力。 一、题目描述&#xff1a; 给一个整数数组 nums &#xff0c;如果 nums 至少包含 2 个元素&#xff0c…

MySQL数据库(7)

MySQL数据库&#xff08;7&#xff09; 一、MySQL介绍 数据库的介绍 数据库就是存储和管理数据的仓库&#xff0c;数据按照一定的格式进行存储&#xff0c;用户可以对数据库中的数据进行增加、修改、删除、查询等操作 数据库的分类 关系型数据库非关系型数据库 关系型数据…

python词云生成库-wordcloud

内容目录 一、模块介绍二、WordCloud常用的方法1. generate(self, text)2. generate_from_frequencies(frequencies)3. fit_words(frequencies)4. generate_from_text(text) 三、进阶技巧1. 设置蒙版2. 设置过滤词 WordCloud 是一个用于生成词云的 Python 库&#xff0c;它可以…

关于安装typescript后运行tsc -v命令报错问题

报错信息&#xff1a; tsc 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 没有配置环境变量&#xff0c;使用npm命令查看typescript的安装目录&#xff1a; npm config get prefix 根据控制台输出的目录&#xff0c;配置path环境变量 tsc -v 运行成功&…

Apache Kylin:大数据分析从入门到精通

一、Kylin简介 Apache Kylin是一个分布式数据分析引擎,专为处理海量数据设计,能够在极短时间内对超大规模数据集进行OLAP(Online Analytical Processing)分析。Kylin通过预计算和高效的查询机制,为用户提供秒级的查询响应时间,支持与Hadoop、Hive、HBase等大数据平台无缝…

开源模型应用落地-LangChain高阶-LCEL-表达式语言(二)

一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么? LCEL是一种非常灵活和强大的语言,可以帮助您更…

鸿蒙轻内核M核源码分析系列十七(3) 异常信息ExcInfo

本文中所涉及的源码&#xff0c;以OpenHarmony LiteOS-M内核为例&#xff0c;均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_m 获取。鸿蒙轻内核异常钩子模块代码主要在components\exchook目录下。 1、异常信息的宏定义、枚举和结构体 在文件components\exch…

[DT] 翻译笔记

这本书由129位作者贡献了50章。这一章是本书每一章的一般介绍。从第二章开始&#xff0c;介绍了数字孪生的概念、架构描述、设计规范和应用场景。第2节介绍了数字孪生的概念和发展。第3节介绍了促进数字孪生发展的核心技术。第4节介绍了数字孪生的一般框架和构建方法。第5节介绍…