
海明距离(hamming distance)是两个等长字符串之间对应位置上不同字符的数量。它广泛应用于错误检测、编码理论以及生物信息学等领域。例如,字符串"karolin"和"kathrin"的海明距离是3(o与t,l与h,i与i相同,但r与r相同,n与n相同)。如果两个字符串的长度不相等,则它们的海明距离通常被认为无法计算或定义为某个特定值(例如-1)。
我们将创建一个名为 hamming 的静态方法,它接收两个字符串作为参数,并返回它们的海明距离。
public static int hamming(String s1, String s2) {
// 检查字符串长度是否相等,不相等则返回-1
if (s1.length() != s2.length()) {
return -1;
}
int distance = 0;
// 遍历字符串,比较对应位置的字符
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
distance++; // 字符不同,距离加1
}
}
return distance;
}main 方法将负责处理用户输入、调用 hamming 方法计算距离、存储结果,并最终找出并显示最短距离。
我们需要一个字符串数组 stringList 来存储用户输入的5个字符串,以及一个整数数组 distances 来存储每个字符串与目标字符串的海明距离。
import java.util.Scanner;
import java.util.Arrays; // 用于打印数组
public class HammingDistanceCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 定义存储5个字符串的数组
String[] stringList = new String[5];
// 定义存储5个海明距离的数组
int[] distances = new int[5];
// ... (后续代码)
}
// ... (hamming 方法)
}程序将首先提示用户输入5个字符串,然后输入一个目标字符串。
立即学习“Java免费学习笔记(深入)”;
// 读取5个字符串到stringList数组
System.out.println("请输入5个字符串:");
for (int i = 0; i < 5; i++) {
System.out.print((i + 1) + ". Enter string: ");
stringList[i] = scanner.nextLine();
}
// 读取目标字符串
System.out.print("Enter target: ");
String target = scanner.nextLine();使用循环遍历 stringList 数组,对每个字符串调用 hamming 方法,并将返回的距离存储到 distances 数组中。
// 计算每个字符串与目标字符串的海明距离
for (int i = 0; i < 5; i++) {
distances[i] = hamming(target, stringList[i]);
}遍历 distances 数组,找出其中最小的非负距离。同时,需要记录下与最短距离对应的字符串在 stringList 中的索引。如果所有距离都是 -1,则表示没有找到有效的海明距离。
int minDistance = Integer.MAX_VALUE; // 初始化为最大值
int minDistanceIndex = -1; // 记录最短距离的索引
// 查找最短海明距离
for (int i = 0; i < 5; i++) {
// 忽略-1(表示长度不匹配)
if (distances[i] != -1) {
if (distances[i] < minDistance) {
minDistance = distances[i];
minDistanceIndex = i;
}
}
}最后,程序将打印 distances 数组的所有内容,并根据找到的最短距离显示相应的字符串。
// 显示distances数组内容
System.out.println("Contents of array distances:");
// 按照示例格式输出
for (int i = 0; i < 5; i++) {
System.out.println(i + " " + distances[i]);
}
// 显示最短距离对应的字符串
if (minDistanceIndex != -1) {
System.out.println("String with min Hamming distance: " + stringList[minDistanceIndex] + ".");
} else {
System.out.println("No Hamming distance found");
}
scanner.close(); // 关闭Scanner将上述所有部分整合到一个Java类中,即可得到完整的解决方案。
import java.util.Scanner;
import java.util.Arrays; // 用于打印数组,尽管本例中手动循环打印
public class HammingDistanceCalculator {
/**
* 计算两个字符串的海明距离。
* 如果字符串长度不相等,则返回-1。
*
* @param s1 第一个字符串
* @param s2 第二个字符串
* @return 海明距离,如果长度不匹配则返回-1
*/
public static int hamming(String s1, String s2) {
// 检查字符串长度是否相等
if (s1.length() != s2.length()) {
return -1;
}
int distance = 0;
// 遍历字符串,比较对应位置的字符
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
distance++; // 字符不同,距离加1
}
}
return distance;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 定义存储5个字符串的数组
String[] stringList = new String[5];
// 定义存储5个海明距离的数组
int[] distances = new int[5];
// 读取5个字符串到stringList数组
System.out.println("请输入5个字符串:");
for (int i = 0; i < 5; i++) {
System.out.print((i + 1) + ". Enter string: ");
stringList[i] = scanner.nextLine();
}
// 读取目标字符串
System.out.print("Enter target: ");
String target = scanner.nextLine();
// 计算每个字符串与目标字符串的海明距离
for (int i = 0; i < 5; i++) {
distances[i] = hamming(target, stringList[i]);
}
int minDistance = Integer.MAX_VALUE; // 初始化为最大值,用于寻找最小值
int minDistanceIndex = -1; // 记录最短距离的字符串索引
// 查找最短海明距离
for (int i = 0; i < 5; i++) {
// 忽略-1(表示长度不匹配,无法计算海明距离)
if (distances[i] != -1) {
if (distances[i] < minDistance) {
minDistance = distances[i];
minDistanceIndex = i;
}
}
}
// 显示distances数组内容
System.out.println("Contents of array distances");
for (int i = 0; i < 5; i++) {
System.out.println(i + " " + distances[i]);
}
// 显示最短距离对应的字符串
if (minDistanceIndex != -1) {
System.out.println("String with min Hamming distance: " + stringList[minDistanceIndex] + ".");
} else {
System.out.println("No Hamming distance found");
}
scanner.close(); // 关闭Scanner资源
}
}通过本教程,您应该已经掌握了如何在Java中实现海明距离的计算,以及如何在一个字符串列表中查找与目标字符串海明距离最短的元素。这个基本框架可以根据具体需求进行扩展和优化。
以上就是Java中字符串海明距离计算与列表匹配教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号