java两个字符串的相似度
⽐较两个字符串的相似度,核⼼算法是⽤⼀个2维数组记录每个字符串是否相同,如果相同记为0,不相同记为1,每⾏,每列的相同个数累加,则数组最后⼀个数为不相同个数的总数。从⽽判断这两个字符串的相似度,在判断⼤⼩写时,没有区分⼤⼩写,即⼤⼩写视为相同的字符。
package st;
public class Levenshtein
{
字符串截取去掉最后一位private int compare(String str, String target)
{
int d[][];              // 矩阵
int n = str.length();
int m = target.length();
int i;                  // 遍历str的
int j;                  // 遍历target的
char ch1;              // str的
char ch2;              // target的
int temp;              // 记录相同字符,在某个矩阵位置值的增量,不是0就是1
if (n == 0) { return m; }
if (m == 0) { return n; }
d = new int[n + 1][m + 1];
for (i = 0; i <= n; i++)
{                      // 初始化第⼀列
d[i][0] = i;
}
for (j = 0; j <= m; j++)
{                      // 初始化第⼀⾏
d[0][j] = j;
}
for (i = 1; i <= n; i++)
{                      // 遍历str
ch1 = str.charAt(i - 1);
// 去匹配target
for (j = 1; j <= m; j++)
{
ch2 = target.charAt(j - 1);
if (ch1 == ch2 || ch1 == ch2+32 || ch1+32 == ch2)
{
temp = 0;
} else
{
temp = 1;
}
// 左边+1,上边+1, 左上⾓+temp取最⼩
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);
}
}
return d[n][m];
}
private int min(int one, int two, int three)
{
return (one = one < two ? one : two) < three ? one : three;
}
/**
* 获取两字符串的相似度
*/
public float getSimilarityRatio(String str, String target)
{
return 1 - (float) compare(str, target) / Math.max(str.length(), target.length());
}
public static void main(String[] args)
{
Levenshtein lt = new Levenshtein();
String str = "中国";
String target = "中⽂";
System.out.println("similarityRatio=" + lt.getSimilarityRatio(str, target));
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。