SwiftLCS

Build Status Carthage compatible Pods Pod platforms

SwiftLCS 提供了一个 Collection 的扩展,用于查找与另一个集合的最长公共子序列的索引。

最长公共子序列 (LCS) 问题是寻找一个序列集合(通常是两个序列)中所有序列共有的最长子序列的问题。它与寻找公共子字符串的问题不同:与子字符串不同,子序列不需要占据原始序列中的连续位置。

该项目基于 NSArray+LongestCommonSubsequence 的 Objective-C 实现。

📦 安装

CocoaPods

CocoaPods 是 Swift 和 Objective-C Cocoa 项目的依赖管理工具。它拥有超过一万个库,可以帮助您优雅地扩展您的项目。

将以下内容添加到您的 Podfile

use_frameworks!

pod 'SwiftLCS'

Carthage

Carthage 构建您的依赖项并为您提供二进制框架,但您可以完全控制您的项目结构和设置。

将以下内容添加到您的 Cartfile

github "Frugghi/SwiftLCS"

Swift Package Manager

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

String (字符串)

let x = "abracadabra"
let y = "yabbadabbadoo"

let z = x.longestCommonSubsequence(y) // abadaba

Array (数组)

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]

Indexes (索引)

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 将不会返回正确的索引。

📄 许可证 LICENSE

SwiftLCS 是在 MIT 许可证下发布的。 有关详细信息,请参见 LICENSE