题目标题:


计算两个字符串的最长公共子序列的长度,字符不区分大小写。

输入描述:输入两个字符串,分两行输入。

输出描述:输出一个整数。

示例:

输入:

测试数据1(注,字符串前有空格):

 12asdfawe2rasdaswer

输出:6

测试数据2:

ABCADAB
BACDBA

输出:4

结果:

LCS是Longest Common Subsequence的缩写,即最长公共子序列。一个序列,如果是两个或多个已知序列的子序列,且是所有子序列中最长的,则为最长公共子序列。

比如,对于char x[]="aabcd";有顺序且相互相邻的aabc是其子序列,有顺序但是不相邻的abc也是其公共子序列。即,只要得出序列中各个元素属于所给出的数列,就是子序列。再加上char y[]="12abcabcd";对比出才可以得出最长公共子序列abcd。


最长公共子序列动态规划解法:
dp[i][j] -- 表示子串A[0...i](数组长度为n)和子串B[0...j](数组长度为m)的最长公共子序列

当A[i] == B[j]时,dp[i][j] = dp[i-1][j-1] + 1;

否则,dp[i][j] = max(dp[i-1][j], dp[i][j-1]);最优解为dp[n-1][m-1];


JAVA代码实现:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextLine()) {String str1 = scanner.nextLine().toLowerCase();String str2 = scanner.nextLine().toLowerCase();System.out.println(findLCS(str1, str1.length(), str2, str2.length()));}}public static int findLCS(String A, int n, String B, int m) {int[][] dp = new int[n + 1][m + 1];for (int i = 0; i <= n; i++) {for (int j = 0; j <= m; j++) {dp[i][j] = 0;}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (A.charAt(i - 1) == B.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1];}}}return dp[n][m];}
}

最长公共子序列(JAVA实现)相关推荐

  1. 最长公共子序列Java代码实现

    最长公共子序列定义:两个或多个已知数列的子序列集合中最长的就是最长公共子序列. 比如数列A = "abcdef"和B = "adefcb",那么两个数列的公共子 ...

  2. java lcs_LCS最长公共子序列java实现

    packagekpp.base;/*** 获取两个字符串的最长公共子序列 *@authorkpp **/ public classLCSTest {private static String lcs ...

  3. 动态规划示例汇总-Java版(组合硬币、跳台阶、最小路径和、最长递增子序列、最长公共子序列、01背包问题、最小编辑代价)

    动态规划算法示例汇总-Java版 组合硬币 Java解题-暴力搜索 Java解题-记忆搜索 Java解题-动态规划(两种写法) 跳台阶 Java解题-暴力递归 Java解题-动态规划 矩阵最小路径和 ...

  4. java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现

    关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...

  5. [Java] 蓝桥杯ADV-202 算法提高 最长公共子序列

    问题描述 给定两个字符串,寻找这两个字串之间的最长公共子序列. 输入格式 输入两行,分别包含一个字符串,仅含有小写字母. 输出格式 最长公共子序列的长度. 样例输入 abcdgh aedfhb 样例输 ...

  6. Java动态规划求最长公共子序列(LCS)

    最长公共子序列(LCS) 定义:在序列X和序列Y中同时出现的元素,按照脚标从小到大排列的这样的序列.         String x = "ABCBDABGGGTT";      ...

  7. 用java设计一个文件查重程序,输入两个文本文件,输出两个文本文件的重复率(最长公共子序列的应用)...

    你可以使用java代码来设计一个文件查重程序.首先,你需要读取两个文本文件的内容,将它们存储在字符串变量中.然后,你可以使用最长公共子序列(LCS)算法来计算两个字符串的重复率. LCS算法的实现方法 ...

  8. java lcs_Java算法之最长公共子序列问题(LCS)实例分析

    本文实例讲述了Java算法之最长公共子序列问题(LCS).分享给大家供大家参考,具体如下: 问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= { x1, x ...

  9. LCS/最长公共子序列/最长公共子串 实现 Python/Java

    参考 http://blog.csdn.net/u012102306/article/details/53184446 http://blog.csdn.net/hrn1216/article/det ...

最新文章

  1. ICLR 2022:AI如何识别“没见过的东西”?
  2. python便捷数据怎么获取_Python数据获取与表示基础编程练习
  3. java 抽象类继承抽象类_Java之继承、抽象类、接口篇
  4. Esfog_UnityShader教程_前言
  5. SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则
  6. Tensorflow 梯度下降实例
  7. 【HTML】中国天气天气插件调用
  8. fckeditor异常总结---org.apache.commons.fileupload.FileUploadException
  9. Pytorch Dataset、Dataloader的简单理解与使用
  10. 微信支付,判断是否安装了微信
  11. 7.4读写锁(ReadWriteLock)
  12. 靠java_人生靠反省,Java靠泛型
  13. mysql建表数据字典_一种数据字典表的创建方式
  14. CCPP Blog 目录
  15. 第一章 HTML基础
  16. 04_从啤酒与尿布,聊关联规则推荐
  17. python堆叠面积图_06. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图...
  18. 划分子网和构造超网(一)
  19. 九、JavaSE-Set接口
  20. 用halcon提取衣服徽章

热门文章

  1. mysql数据库连接javaweb_javaweb中mysql数据库连接方法
  2. ebs和java哪个前景好_EBS与实例存储的好处(反之亦然)[关闭]
  3. Deeplearnng.AI第四部分第一周、卷积神经网络
  4. hadoop3伪分布式安装
  5. jmeter.bat配置(主要关于OOM)
  6. 0523 CSS知识点
  7. IOS开发学习记录第2天之熟悉Xcode常用快捷键
  8. Thinkphp小知识点
  9. buntu 8.04 安装 mysql 无提示输入用户名 密码 ,怎么修改
  10. openwrt 替换Dropbear by openssh-server