SwiftLCS 提供了一个 Collection
的扩展,用于查找与另一个集合的最长公共子序列的索引。
最长公共子序列 (LCS) 问题是寻找一个序列集合(通常是两个序列)中所有序列共有的最长子序列的问题。它与寻找公共子字符串的问题不同:与子字符串不同,子序列不需要占据原始序列中的连续位置。
该项目基于 NSArray+LongestCommonSubsequence 的 Objective-C 实现。
CocoaPods 是 Swift 和 Objective-C Cocoa 项目的依赖管理工具。它拥有超过一万个库,可以帮助您优雅地扩展您的项目。
将以下内容添加到您的 Podfile 中
use_frameworks!
pod 'SwiftLCS'
Carthage 构建您的依赖项并为您提供二进制框架,但您可以完全控制您的项目结构和设置。
将以下内容添加到您的 Cartfile 中
github "Frugghi/SwiftLCS"
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 文档可在此处获取:here。
导入框架
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 对象的对象比较是通过 isEquals:
方法完成的,因此请确保实现正确,否则 SwiftLCS
将不会返回正确的索引。
SwiftLCS 是在 MIT 许可证下发布的。 有关详细信息,请参见 LICENSE。