1. 用Java代码编写计算两个字符串的相似度,用百分比来表示相似度的结果。要求提供完整可运行的Java代码
时间: 2023-06-08 12:03:51 浏览: 108
以下是示例Java代码,采用余弦相似度算法实现字符串相似度计算:
```
import java.util.*;
public class StringSimilarity {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个字符串:");
String str1 = scanner.nextLine();
System.out.print("请输入第二个字符串:");
String str2 = scanner.nextLine();
double similarity = calculateSimilarity(str1, str2);
System.out.println("两个字符串的相似度为:" + (similarity * 100) + "%");
}
public static Map<Character, Integer> buildCharMap(String str) {
Map<Character, Integer> charMap = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (charMap.containsKey(c)) {
charMap.put(c, charMap.get(c) + 1);
} else {
charMap.put(c, 1);
}
}
return charMap;
}
public static double calculateSimilarity(String str1, String str2) {
Map<Character, Integer> charMap1 = buildCharMap(str1);
Map<Character, Integer> charMap2 = buildCharMap(str2);
Set<Character> charSet = new HashSet<>();
charSet.addAll(charMap1.keySet());
charSet.addAll(charMap2.keySet());
int dotProduct = 0;
int norm1 = 0;
int norm2 = 0;
for (Character c : charSet) {
int freq1 = charMap1.getOrDefault(c, 0);
int freq2 = charMap2.getOrDefault(c, 0);
dotProduct += freq1 * freq2;
norm1 += freq1 * freq1;
norm2 += freq2 * freq2;
}
return dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2));
}
}
```
解释:该程序先用输入的两个字符串分别构建 Map,记录每个字符在字符串中出现的频次。然后将两个 Map 合并为一个 Set,对于每个字符,计算它们在两个字符串中的频次乘积,最后利用余弦相似度公式计算相似度。最终输出结果为百分比。
阅读全文