我是靠谱客的博主 老实砖头,最近开发中收集的这篇文章主要介绍iOS:使用莱文斯坦距离算法计算两串字符串的相似度,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Levenshtein:莱文斯坦距离

Levenshtein的经典算法,参考http://en.wikipedia.org/wiki/Levenshtein_distance的伪代码实现的,同时参考了一些C++的实现,求字符串相似度。

下面求出结果是0.0~100.0,   表示为0%~100%。

static inline int min(int a, int b) {
return a < b ? a : b;
}
+(float)likePercentByCompareOriginText:(NSString *)originText targetText:(NSString *)targetText{
//length
int n = (int)originText.length;
int m = (int)targetText.length;
if (n == 0 || m == 0) {
return 0.0;
}
//Construct a matrix, need C99 support
int N = n+1;
int **matrix;
matrix = (int **)malloc(sizeof(int *)*N);
int M = m+1;
for (int i = 0; i < N; i++) {
matrix[i] = (int *)malloc(sizeof(int)*M);
}
for (int i = 0; i<N; i++) {
for (int j=0; j<M; j++) {
matrix[i][j]=0;
}
}
for(int i=1; i<=n; i++) {
matrix[i][0]=i;
}
for(int i=1; i<=m; i++) {
matrix[0][i]=i;
}
for(int i=1;i<=n;i++)
{
unichar si = [originText characterAtIndex:i-1];
for(int j=1;j<=m;j++)
{
unichar dj = [targetText characterAtIndex:j-1];
int cost;
if(si==dj){
cost=0;
}
else{
cost=1;
}
const int above = matrix[i-1][j]+1;
const int left = matrix[i][j-1]+1;
const int diag = matrix[i-1][j-1]+cost;
matrix[i][j] = min(above, min(left,diag));
}
}
return 100.0 - 100.0*matrix[n][m]/MAX(m,n);
}

 

转载于:https://www.cnblogs.com/XYQ-208910/p/8385125.html

最后

以上就是老实砖头为你收集整理的iOS:使用莱文斯坦距离算法计算两串字符串的相似度的全部内容,希望文章能够帮你解决iOS:使用莱文斯坦距离算法计算两串字符串的相似度所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部