问题:

段位:4

说明:

查找两个字符串之间,按照顺序匹配出最长的一个字符串出来,匹配时候按照各个字符相对位置顺序,不用连续,然后返回匹配出来的字符串,相同长度的返回任意一个就行。

输入案例:

// 匹配时候按照各个字符相对位置顺序,不用连续,然后返回匹配出来的字符串
lcs( "abcdef", "abc" ) => "abc"
lcs( "abcdef", "acf" ) => "acf"
lcs( "132535365", "123456789" ) => "12356"
lcs( "abcdefghijklmnopq", "apcdefghijklmnobq" ) => "acdefghijklmnoq"
lcs( "abc", "acb" ) => "ac" "ab" // 相同长度,返回任意一个就可以

我的代码:

毕竟不是科班出身,动态规划还真的太烂了,我用了String[][] 来进行动态规划,性能是不怎样,之前想法是其实也是打表,然后进行一个DiagonalTraverse 这道题的遍历方法,想把最长的一条斜链直接求出来,就不用拿String[][] 来存动态规划的结果,拿个boolean[]就可以了,不过还是失败了。

public class LongestCommonSubsequence {public static void main(String[] args) {System.out.println(Lcs.lcs("nothardlythefinaltest", "zzzfinallyzzz"));System.out.println(Lcs.lcs("a", "a"));System.out.println(Lcs.lcs("abcdefghijklmnopq", "apcdefghijklmnobq"));}static class Lcs {static String lcs(String a, String b) {if(a == null || b == null || a.equals("") || b.equals("")) return "";int alen = a.length();int blen = b.length();// 长度+1 是因为算法里面的需求String[][] dp = new String[blen + 1][alen + 1];// 单线程拼接的问题肯定用builder,用+号很明显jdk循环中不断创建builder性能不行StringBuilder builder = new StringBuilder();for (int i = blen; i -- > 0;) {for (int j = alen; j -- > 0;) {if (a.charAt(j) == b.charAt(i)) {// 先进行拼凑builder.append(a.charAt(j));// 非空才拼接if(dp[i + 1][j + 1] != null) builder.append(dp[i + 1][j + 1]);dp[i][j] = builder.toString();// 然后置零builder.setLength(0);}else {// 纯粹为了拿来判断长度if(dp[i + 1][j] == null) dp[i + 1][j] = "";if(dp[i][j + 1] == null) dp[i][j + 1] = "";// 如果长度一致不影响结果,拿长度最长就行dp[i][j] = dp[i + 1][j].length() < dp[i][j + 1].length()? builder.append(dp[i][j + 1]).toString() : builder.append(dp[i + 1][j]).toString();builder.setLength(0);}}}return dp[0][0]; // do it!}}
}

[Codewar训练]Longest Common Subsequence(Performance version)(最长子序)相关推荐

  1. C++longest common subsequence最长公共子序列的实现(附完整源码)

    C++longest common subsequence最长公共子序列 longest common subsequence最长公共子序列的完整源码(定义,实现,main函数测试) longest ...

  2. 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)...

    2019独角兽企业重金招聘Python工程师标准>>> 问题描述:序列X={x1,x2,-,xn},Y={y1,y2,-,yn},当Z={z1,z2-,zn}是X的严格递增下标顺序( ...

  3. UVA10405 Longest Common Subsequence【LCS+DP】

    Given two sequences of characters, print the length of the longest common subsequence of both sequen ...

  4. 最长公共子串LCS (Longest Common Subsequence) 算法

    三个方法都有所借鉴,但代码部分是自己试着写出来的,虽然最后的运行结果都是正确的,但此过程中难免会有考虑不周全的地方,如发现代码某些地方有误,欢迎指正.同时有新的想法,也可以提出! 采用顺序结构存储串, ...

  5. LeetCode——1143. 最长公共子序列(Longest Common Subsequence)[中等]——分析及代码(Java)

    LeetCode--1143. 最长公共子序列[Longest Common Subsequence][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代 ...

  6. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  7. leetcode1143. Longest Common Subsequence

    题目:题目链接 官方题解 强烈建议官方题解,通俗易懂,别看我的了,真不建议 题目大意:LCS(subsequence):求两个字符串text1,text2的最长公共子序列(注意是序列,不是字串,可以不 ...

  8. UVA 10405 - Longest Common Subsequence

    本题是求最长公共子序列,题目也给了提示,是求最长公共子序列最基本的题. 注意字符串的读取要用gets()而不用scanf()因为字符串里可能有空格. 代码如下: #include<stdio.h ...

  9. leetcode 1143. Longest Common Subsequence | 1143. 最长公共子序列(动态规划,暴力递归->傻缓存->dp)

    题目 https://leetcode.com/problems/longest-common-subsequence/ 题解 经典的 暴力递归 -> 傻缓存 -> dp 题目,以 &qu ...

最新文章

  1. BCH网络成功发布第一个商业级别的Token
  2. php学习之Model类
  3. Kotlin与Java的几种单例模式
  4. Redis 多线程网络模型全面揭秘|网络硬核系列
  5. ARC 101 D - Median of Medians
  6. java .vm h2_java-H2服务器在调试时挂起
  7. 自然场景下的文字检测:从多方向迈向任意形状
  8. java+jquery实现长轮询案例_网页实时聊天之js和jQuery实现ajax长轮询
  9. jQuery实用Ajax loading旋转指示器插件
  10. 判断是否是合法的IP地址
  11. 简单的小愿望,就这么难实现
  12. mac mini u盘安装系统_U盘重装Mac全新操作系统教程
  13. C/C++回溯经典练习:马的走法
  14. 单模光纤和多模光纤的对比
  15. android官方模拟器下载安装,网易MuMu模拟器
  16. SparkLink星闪技术之SLB概述
  17. java基础知识-----转
  18. intelliJ IDEA启用快速定位文件图标
  19. 计算机底层01-计算机发展史
  20. LeetCode 362. 敲击计数器

热门文章

  1. titanic_kaggle
  2. 基于机器学习算法的慢性肾病危险因素预测
  3. 手把手教你给偶像刷票。偶像来了?程序员来了!Charles实战
  4. python的基本数据类型有哪些?
  5. 考研几大坏习,玻璃心、拖延症、手机党...,你中了几条?
  6. 计算机更新电源,升级了显卡千万别忘记也要把电源升级
  7. Java JTS点线面分析、线以及多边形合并、面积计算
  8. 本征正交分解(POD)入门(详解)
  9. UE4C++采用官网方法实现多国语言的切换
  10. CNN卷积神经网络是什么?