开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3085|回复: 11
收起左侧

[算法]最长公共子序列

[复制链接]
发表于 2017-1-22 12:51:36 | 显示全部楼层 |阅读模式   广东省珠海市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
首先我很差异,这么经典的算法为什么没人发(我估计也没人用)

最长公共子序列

问题
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
比如两个串为:
ABCD
EACB
其中AC是他最长的公共子序列
输入
  1. 第一行:字符串A
  2. 第二行:字符串B
  3. //其中字符串A和字符串B的长度小于1000
复制代码
输出
  1. 输出最长的子序列,如果有多个,随意输出1个。
复制代码
输入示例
  1. 第一行:j9ZBv331f9
  2. 第二行:F933NPf7FbjP
  3. //来自“精易模块”-“文本_取随机字符()”
复制代码
输出示例
  1. 933f
复制代码


实现思路:网上其实很多的,我在此不复制了。(太懒





示例代码:
最长公共子序列.zip (638.37 KB, 下载次数: 24)

点评

能否说下具体用在什么地方,实用性   江西省萍乡市  发表于 2017-1-22 12:56

评分

参与人数 1好评 +1 收起 理由
cbcweb + 1 你太天真了,很多连数列都不知道什么更别说公共子序列了

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (47/47)

签到天数: 21 天

发表于 2020-12-11 21:48:50 | 显示全部楼层   江西省南昌市
  1. .版本 2

  2. .子程序 最长公共子序列相似度2, 双精度小数型, , 稍微改进,可匹配中文但有BUG
  3. .参数 文本一, 文本型
  4. .参数 文本二, 文本型
  5. .局部变量 Char1, 文本型, , "0"
  6. .局部变量 Char2, 文本型, , "0"
  7. .局部变量 Long1, 整数型
  8. .局部变量 Long2, 整数型
  9. .局部变量 Matrix, 整数型, , "0"
  10. .局部变量 i, 整数型
  11. .局部变量 j, 整数型
  12. .局部变量 k, 整数型
  13. .局部变量 return, 文本型
  14. .局部变量 a, 正则表达式类
  15. .局部变量 aa, 正则表达式类


  16. a.创建 (“\S”, 文本一, , , , )
  17. aa.创建 (“\S”, 文本二, , , , )

  18. Long1 = a.取匹配数量 ()
  19. Long2 = aa.取匹配数量 ()

  20. 重定义数组 (Matrix, 假, Long1, Long2)

  21. Matrix [1] [1] = 1  ' matrix[0][0]=1

  22. .变量循环首 (2, Long1, 1, i)  ' for(int i = 1;i<=long1,i++){
  23.     Matrix [i] [1] = 1  ' matrix[i][0]=1
  24. .变量循环尾 ()  ' }

  25. .变量循环首 (2, Long2, 1, i)  ' for(int i = 1;i<=long2,i++){
  26.     Matrix [1] [i] = 1  ' matrix[0][i]=1
  27. .变量循环尾 ()  ' }

  28. .变量循环首 (2, Long1, 1, i)  ' for(int i = 1;i<=long1,i++){

  29.     .变量循环首 (2, Long2, 1, j)  ' for(int j = 1;i<=long2,i++){
  30.         .如果 (a.取匹配文本 (i - 1, ) = aa.取匹配文本 (j - 1, ))  ' if (char1[i-1] == char2[j-1]) {
  31.             Matrix [i] [j] = Matrix [i - 1] [j - 1] + 1  ' matrix[i][j] = matrix[i - 1][j - 1] + 1;
  32.         .否则
  33.             Matrix [i] [j] = 选择 (Matrix [i - 1] [j] > Matrix [i] [j - 1], Matrix [i - 1] [j], Matrix [i] [j - 1])  ' Math.max(matrix[i - 1][j], matrix[i][j - 1])
  34.         .如果结束
  35.         ' }

  36.     .变量循环尾 ()  ' }

  37. .变量循环尾 ()  ' }

  38. i = Long1  ' int i = m, j = n;
  39. j = Long2

  40. k = 1  ' int k = 1;

  41. .判断循环首 (k ≠ Matrix [Long1] [Long2])  ' while (k != matrix[m][n]) {
  42.     .如果真 (Matrix [i - 1] [j] = Matrix [i] [j])  ' if(matrix[i-1][j]==matrix[i][j]]){
  43.         i = i - 1  ' i--;}
  44.         到循环尾 ()
  45.     .如果真结束
  46.     .如果真 (Matrix [i] [j - 1] = Matrix [i] [j])  ' if(matrix[i][j-1]==matrix[i][j]]){
  47.         j = j - 1  ' j--;}
  48.         到循环尾 ()
  49.     .如果真结束
  50.     .如果真 (Matrix [i] [j] ≠ Matrix [i - 1] [j - 1])
  51.         return = a.取匹配文本 (i - 1, ) + return  ' StringBuilder.insert(0,char1[i-1]);
  52.         ' 输出调试文本 (Char1 [i - 1])
  53.         k = k + 1  ' k++;
  54.     .如果真结束
  55.     i = i - 1  ' i--;
  56.     j = j - 1  ' j--;
  57. .判断循环尾 ()

  58. 返回 (选择 (Long1 > Long2, 求字数 (return) ÷ aa.取匹配数量 (), 求字数 (return) ÷ a.取匹配数量 ()))
  59. [code].版本 2

  60. .子程序 求字数, 整数型
  61. .参数 text, 文本型
  62. .局部变量 a, 正则表达式类

  63. a.创建 (“\S”, text, , , , )
  64. 返回 (a.取匹配数量 ())
复制代码
[/code]
回复 支持 反对

使用道具 举报

结帖率:100% (47/47)

签到天数: 21 天

发表于 2020-12-11 21:41:30 | 显示全部楼层   江西省南昌市
出现中文字符也出错
回复 支持 反对

使用道具 举报

结帖率:100% (47/47)

签到天数: 21 天

发表于 2020-12-11 21:39:55 | 显示全部楼层   江西省南昌市
wwsw和wsw,www和www, 类似的文本对比出现bug
回复 支持 反对

使用道具 举报

发表于 2017-1-27 08:40:50 | 显示全部楼层   广东省广州市
感谢楼主热心分享!
回复 支持 反对

使用道具 举报

结帖率:76% (28/37)
发表于 2017-1-25 10:56:42 | 显示全部楼层   福建省三明市
调试输出 (计算_最长公共子序列 (“123456”, “123456”))
输出为: “12345”
我对这个算法不了解...
算法就是这样的?还是有问题?
回复 支持 反对

使用道具 举报

发表于 2017-1-23 00:09:15 | 显示全部楼层   江苏省常州市
666
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-22 21:11:26 | 显示全部楼层   广东省珠海市

说一下实用性(来自互联网)

检查生物基因相似度(比较文本相似度?)
回复 支持 反对

使用道具 举报

结帖率:40% (31/78)
发表于 2017-1-22 15:13:13 | 显示全部楼层   四川省成都市
厉害呢
回复 支持 反对

使用道具 举报

结帖率:95% (37/39)

签到天数: 8 天

发表于 2017-1-22 12:57:01 | 显示全部楼层   河北省石家庄市
本代码按照原java代码翻译而来

点评

咋?对于这个算法实现思路都差不多。。。都是做表格然后一个个比较   广东省珠海市  发表于 2017-1-22 12:58
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表