博客
关于我
Objective-C实现longestCommonSubsequence最长公共子序列算法(附完整源码)
阅读量:792 次
发布时间:2023-02-19

本文共 1574 字,大约阅读时间需要 5 分钟。

Objective-C实现最长公共子序列算法

以下是一个使用Objective-C编写的最长公共子序列(LCS)算法的完整实现代码。该算法基于动态规划原理,能够有效地计算两个字符串的最长公共子序列。

#import 

@interface LCS : NSObject

  • (NSString *)longestCommonSubsequenceBetween:(NSString *)string1:(NSString *)string2;

@implementation LCS (NSString *)longestCommonSubsequenceBetween:(NSString *)string1:(NSString *)string2{// 初始化一个二维数组来保存中间结果int **dp = [[int alloc] init]; // 计算字符串的长度NSInteger len1 = [string1 length];NSInteger len2 = [string2 length]; // 初始化dp数组,dp[i][j]表示第i个字符和第j个字符的最长公共子序列长度for (NSInteger i = 0; i <= len1; i++) {for (NSInteger j = 0; j <= len2; j++) {if (i == 0 || j == 0) {dp[i][j] = 0;} else if (string1[i-1] == string2[j-1]) {dp[i][j] = dp[i-1][j-1] + 1;} else {dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}}} // 由于Objective-C不能直接将整数数组转换为NSString,我们需要将二维数组转换为一个线性数组// 并将路径恢复出来return [self getLCSFromDP:dp len1: len1 len2: len2];} (NSString *)getLCSFromDP:(int **)dplen1:(NSInteger)len1len2:(NSInteger)len2{NSInteger i = len1;NSInteger j = len2; // 从dp数组中找出路径并构建最长公共子序列while (i > 0 && j > 0) {if (dp[i][j] == dp[i-1][j-1] + 1) {// 当前字符匹配,加入结果result += [string1 characterAt(i-1)];i--;j--;} else if (dp[i][j] == dp[i-1][j]) {// 上移i--;} else {// 左移j--;}} return result;} @end

该实现采用动态规划算法来解决最长公共子序列问题。通过创建一个二维数组来保存中间计算结果,逐步比较两个字符串中的字符,最终找出最长公共子序列。该算法的时间复杂度为O(n*m),其中n和m分别是两个字符串的长度。

示例使用:

LCS *lcs = [[LCS alloc] init]; NSString *result = [lcs longestCommonSubsequenceBetween:@"abcde" :@"ace"]; NSLog(@"最长公共子序列为:%@", result);

转载地址:http://wlnfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现combinationSum组合和算法(附完整源码)
查看>>
Objective-C实现combinations排列组合算法(附完整源码)
查看>>
Objective-C实现combine With Repetitions结合重复算法(附完整源码)
查看>>
Objective-C实现combine Without Repetitions不重复地结合算法(附完整源码)
查看>>
Objective-C实现conjugate gradient共轭梯度算法(附完整源码)
查看>>
Objective-C实现connected components连通分量算法(附完整源码)
查看>>
Objective-C实现Connected Components连通分量算法(附完整源码)
查看>>
Objective-C实现Convex hull凸包问题算法(附完整源码)
查看>>
Objective-C实现convolution neural network卷积神经网络算法(附完整源码)
查看>>
Objective-C实现convolve卷积算法(附完整源码)
查看>>
Objective-C实现coulombs law库仑定律算法(附完整源码)
查看>>
Objective-C实现counting sort计数排序算法(附完整源码)
查看>>
Objective-C实现countSetBits设置位的数量算法(附完整源码)
查看>>
Objective-C实现currency converter货币换算算法(附完整源码)
查看>>
Objective-C实现cycle sort循环排序算法(附完整源码)
查看>>
Objective-C实现data transformations数据转换算法(附完整源码)
查看>>
Objective-C实现datamatrix二维码识别 (附完整源码)
查看>>
Objective-C实现DateToDay 方法算法(附完整源码)
查看>>
Objective-C实现DBSCAN聚类算法(附完整源码)
查看>>
Objective-C实现DBSCAN聚类算法(附完整源码)
查看>>