最长公共子序列(Swift版本)
class Mark {
var count: Int
var type: Int
init(count: Int, type: Int) {
self.count = count
self.type = type
}
}
func findLcs(_ list1: [Character], _ list2: [Character]) -> [Character] {
for c in list1 {
print("list1 = \(c)")
}
for c in list2 {
print("list2 = \(c)")
}
let m = list1.count
let n = list2.count
var marks = [Mark]()
for _ in 1...m*n {
marks.append(Mark(count: 0, type: 0))
}
for i in 0...m-1 {
for j in 0...n-1 {
var mark = marks[i*n + j]
if list1[i] == list2[j] {
mark.type = 2
// print("got a equable")
if i == 0 || j == 0 {
mark.count = 1
} else {
let _mark = marks[(i-1)*n + (j-1)]
mark.count = _mark.count + 1
}
} else {
let mark1 = i > 0 ? marks[(i-1)*n + j] : marks[j]
let mark2 = j > 0 ? marks[i*n + (j-1)] : marks[i*n]
if mark1.count >= mark2.count {
mark.type = 1
mark.count = mark1.count
} else {
mark.count = mark2.count
}
}
}
}
// for mark in marks {
// print("mark's count = \(mark.count), mark's type = \(mark.type)")
// }
var characters = [Character]()
func printLcs(_ list: [Character], _ i: Int, _ j: Int) {
if i < 0 || j < 0 {
return
}
let type = marks[i*n+j].type
if type == 2 {
printLcs(list, i-1, j-1)
characters.append(list[i])
} else if type == 1 {
printLcs(list, i-1, j)
} else {
printLcs(list, i, j-1)
}
}
printLcs(list1, list1.count-1, list2.count-1)
return characters
}
let list1 = "ABCDEF"
let list2 = "BDCEFG"
let characters = findLcs(Array(list1.characters), Array(list2.characters))
for c in characters {
print("\(c)")
}
测试环境:https://swiftlang.ng.bluemix.net/#/repl
最长公共子序列(Swift版本)的更多相关文章
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- LCS最长公共子序列HDU1159
最近一直在学习算法,基本上都是在学习动态规划以及字符串.当然,两者交集最经典之一则是LCS问题. 首先LCS的问题基本上就是在字符串a,b之间找到最长的公共子序列,比如 YAOLONGBLOG 和 Y ...
- python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)
问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 belong cnblogs 输出示例 blog ...
- 【转】最长公共子序列(LCS),求LCS长度和打印输出LCS
求LCS的长度,Java版本: public static int LCS(int[]a,int[] b) { int [][]c=new int[a.length+1][b.length+1]; f ...
- 【线型DP模板】最上上升子序列(LIS),最长公共子序列(LCS),最长公共上升子序列(LCIS)
BEGIN LIS: 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序 ...
- 从最长公共子序列问题理解动态规划算法(DP)
一.动态规划(Dynamic Programming) 动态规划方法通常用于求解最优化问题.我们希望找到一个解使其取得最优值,而不是所有最优解,可能有多个解都达到最优值. 二.什么问题适合DP解法 如 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- LintCode 77: 最长公共子序列
public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common s ...
随机推荐
- 一步步教会你微信小程序的登录鉴权
前言 为了方便小程序应用使用微信登录态进行授权登录,微信小程序提供了登录授权的开放接口.乍一看文档,感觉文档上讲的非常有道理,但是实现起来又真的是摸不着头脑,不知道如何管理和维护登录态.本文就来手把手 ...
- [XJOI]noip43 T2多人背包
多人背包 DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包.这些包的容量是相同的,都是 V.可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值.在 DD 看来,合理的 ...
- website robots.txt 防爬虫 措施
robots.txt文件用法举例: 1. 允许所有的robot访问 User-agent: * Allow: / 或者 User-agent: * Disallow: 2. 禁止所有搜索引擎访问网站的 ...
- lua 计算字符串字符个数“中文字算一个字符”
local function GetStringWordNum(str) local fontSize = local lenInByte = #str local count = local i = ...
- hihoCoder挑战赛31
#1595 : Numbers 时间限制:8000ms 单点时限:1000ms 内存限制:256MB 描述 给定n个整数常数c[1], c[2], ..., c[n]和一个整数k.现在需要给2k个整数 ...
- 学习环境搭建1——安装python
操作系统:windows7 64bit 下载地址python :https://www.python.org/ 下载Windows x86-64 executable installer 安 ...
- dataAdapter
public static class DataAdapter { /// <summary> /// DataRow转换成Hash对象 /// </summary> /// ...
- 从Spark1.6到Spark2.1,Logging该何去何从
大家都知道spark 1.6.0版本比较稳定,也比较流行. 我们项目组也是,最初用的就是这个版本. 这段时间,项目组引入spark 2.1.0版本,我想尝尝鲜. Pom中刚刚换了dependency马 ...
- SqlServer与MySql语法比较
1.复制表(包括表结构.表数据) SqlServer: Select * into user_copy from user MySql: CREATE TABLE user_copy LIKE use ...
- Spring boot application.properties 配置
原文链接: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.ht ...