SwiftLCS
SwitLCS 为 Collection
增加了查找最长公共子序列中索引的扩展。
最长公共子序列(LCS)问题是在一组序列(通常是两个序列)中找到所有序列的共同子序列的问题。它与找到共同子串的问题不同:与子串不同,子序列不需要在原始序列中连续位置。
该项目基于 Objective-C 的实现 NSArray+LongestCommonSubsequence。
📦 安装
CocoaPods
CocoaPods 是 Swift 和 Objective-C Cocoa 项目的依赖管理器。它拥有超过一万个库,可以帮助您优雅地扩展项目。
将其添加到您的 Podfile
use_frameworks!
pod 'SwiftLCS'
Carthage
Carthage 构建您的依赖并提供二进制框架,同时您仍可完全控制项目结构和设置。
将其添加到您的 Cartfile
github "Frugghi/SwiftLCS"
Swift 包管理器
Swift 包管理器 Swift Package Manager 是一个用于管理 Swift 代码分发的工具。它与 Swift 构建系统集成,以自动化下载、编译和链接依赖项的过程。
将 SwiftLCS
添加到你的 Package.swift 依赖中
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/Frugghi/SwiftLCS.git", majorVersion: 1, minor: 3)
]
)
手动
将 SwiftLCS.swift
包含到你的项目中。
📖 文档
API 文档在此处可用 这里.
💻 用法
导入框架
import SwiftLCS
字符串
let x = "abracadabra"
let y = "yabbadabbadoo"
let z = x.longestCommonSubsequence(y) // abadaba
数组
let x = [1, 2, 3, 4, 5, 6, 7]
let y = [8, 9, 2, 10, 4, 11, 6, 12]
let z = x.longestCommonSubsequence(y) // [2, 4, 6]
索引
let x = [1, 2, 3, 4, 5, 6, 7]
let y = [8, 9, 2, 10, 4, 11, 6, 12]
let diff = x.diff(y)
// diff.commonIndexes: [1, 3, 5]
// diff.addedIndexes: [0, 1, 3, 5, 7]
// diff.removedIndexes: [0, 2, 4, 6]
⚠️ Objective-C
Objective-C 对象通过 isEquals:
方法进行比较,因此请确保实现正确,否则 SwiftLCS
将不会返回正确的索引。
📄 许可证 
SwiftLCS 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE。