引用:http://www.jiaojingkuan.com/archives/689
package com.sky.file;
public class Similarity {
/**
* @param args
*/
private static int min(int one, int two, int three) {
int min = one;
if(two < min) {
min = two;
}
if(three < min) {
min = three;
}
return min;
}
public static int ld(String str1, String str2) {
int d[][]; //矩阵
int n = str1.length();
int m = str2.length();
int i; //遍历str1的
int j; //遍历str2的
char ch1; //str1的
char ch2; //str2的
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++) { //遍历str1
ch1 = str1.charAt(i-1);
//去匹配str2
for(j=1; j<=m; j++) {
ch2 = str2.charAt(j-1);
if(ch1 == 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];
}
public static double sim(String str1, String str2) {
int ld = ld(str1, str2);
return 1 - (double) ld / Math.max(str1.length(), str2.length());
}
public static void main(String[] args) {
String str1 = "我和你";
String str2 = "我和他";
System.out.println("ld="+ld(str1, str2));
System.out.println("sim="+sim(str1, str2));
}
}
分享到:
相关推荐
Boyer-Moore法实现字符串匹配(java) 在字符串匹配问题中,Boyer-Moore算法是一种高效的解决方案。该算法使用坏字符移动表和好后缀移动表来实现字符串匹配。下面将详细解释Boyer-Moore算法的实现原理和java代码...
在Java编程中,比较两个字符串的匹配字数是一项常见的任务,尤其是在文本...总的来说,这个代码片段提供了一个基础的字符串匹配和计数的实现,适用于简单的场景。对于更复杂的匹配需求,可能需要扩展或替换现有的方法。
4. **KR算法**(Knuth-Rabin):基于hash函数的字符串匹配算法,通过随机选取的素数进行校验,减少比较次数。 5. **Horspool算法**:是对BM算法的简化版本,降低了实现复杂性,但可能在某些情况下略逊于BM。 **...
由于Java字符串是不可变的,所以每次修改都需要创建新的字符串对象,`StringBuilder`或`StringBuffer`提供了可变的字符串构建功能,能有效提高性能。 下面是一个简单的Java代码示例: ```java public class ...
9. **Jaro-Winkler距离**:这是一种改进的字符串相似度算法,特别适合名字和地址的匹配,它考虑到字符顺序和接近度。 在实际应用中,选择哪种方法取决于具体需求,比如速度、精度、资源消耗等因素。例如,对于用户...
在JAVA语言中,实现图片格式的验证码涉及到图像处理、字符串生成以及随机数生成等多个技术领域。接下来,我们将深入探讨如何在JAVA中创建这样的验证码。 首先,我们需要了解验证码的基本工作原理。验证码的主要目的...
其次,我们可以利用KMP(Knuth-Morris-Pratt)算法,这是一种线性时间复杂度的字符串匹配算法。KMP算法能够有效地处理部分匹配的情况,避免了在遇到不匹配字符时回溯的冗余操作。对于这个问题,我们可以通过构建KMP...
Gson是Google开发的一款Java库,它主要用于在Java对象和JSON数据之间进行映射,使得Java对象能够被转换成JSON格式的字符串,同时也能够将JSON字符串解析为等效的Java对象。这个库在JavaEE环境中非常有用,因为它简化...
得到分词结果后,可以将两个文本的分词结果转化为SimHash值,然后通过比较这些哈希值的汉明距离来确定相似度。最后,根据计算出的汉明距离,可以转换为百分比形式,方便直观地展示文本的相似程度。 总的来说,本...
判断两个字符串的相似度 java 相似度 string
Java可以利用字符串匹配算法如Jaccard相似度或余弦相似度来计算。 在项目结构方面,`src`目录通常包含源代码,`corpus`可能存储用于训练或测试的语料库,`lib`存放依赖的jar包,`pom.xml`是Maven项目的配置文件,...
5. **字符串操作的效率优化**:在处理大量字符串时,考虑使用StringBuilder或StringBuffer(Java)等数据结构以减少不必要的内存分配。 6. **字符串编码与解码**:可能需要理解ASCII、Unicode、UTF-8等字符编码,并...
在Java中,正则表达式是处理字符串的强大工具,它可以帮助我们完成多种复杂的字符串匹配、替换、查找和切割任务。正则表达式通过构建特定的规则(模式),可以对字符串进行细致的匹配和操作。接下来,我们将详细介绍...
而在其他编程语言中,如Java,字符串类本身就已经考虑了多字节字符的长度计算,因此可以直接使用length属性来获得准确的长度。 总之,在计算字符串长度时,应该根据具体的编程语言和字符串编码情况来选择合适的方法...
ASCII字符串形成 :globe_with_meridians: 我NPUT从用户拍摄和字符串从头开始形成。... 一直执行此过程,直到获得所形成字符串的所有字符都与给定字符串匹配为止。语: Java输入: 特点。 高度(5,10,15,...)。
例如,在搜索引擎中,准确的分词能够提高关键词匹配度,提升搜索结果的相关性;在文本分类中,分词结果直接影响特征提取的质量。 7. **挑战与改进**:虽然双向匹配提高了分词效果,但仍然存在一些挑战,如处理歧义...
- **时间工具类**:提供日期和时间的格式化、比较、计算等功能,例如将日期转换为字符串,或解析字符串为日期对象。 - **正则表达式工具类**:支持正则表达式的编译、匹配、替换和查找,方便进行文本的复杂搜索和...
可以使用正则表达式匹配特定字符串,然后用SpannableString和SpannableStringBuilder来处理颜色变化。 自定义TextView实现竖直跑马灯并配合颜色变化,既满足了动态显示需求,又增加了视觉吸引力。在实际项目中,还...
Trie树,又称字典树或单词查找树,是一种用于高效存储和检索大量字符串的数据结构。它的设计目的是通过共享公共前缀来节省空间,并支持快速模式匹配。Trie树主要应用于信息检索、文本处理等领域。 Trie树有三种基本...
标题中的“类似eclipse文件夹查字符串的工具”指的是能够快速搜索代码库中特定字符串的软件,这样的工具在开发过程中非常实用,特别是对于大型项目或包含多种语言(如PHP)的项目。Eclipse是一款广泛使用的Java集成...