
海明距离(hamming distance)是衡量两个等长字符串之间差异的一种度量。它定义为两个字符串在对应位置上不同字符的数量。例如,字符串 "dog" 和 "dig" 的海明距离为 1,因为只有一个字符 'o' 和 'i' 不同。海明距离在错误检测、编码理论、生物信息学等领域有广泛应用。需要注意的是,海明距离仅适用于长度相同的字符串。
为了计算两个字符串的海明距离,我们需要一个专门的方法。该方法将接收两个字符串作为参数,并根据海明距离的定义返回一个整数。
根据海明距离的定义,如果两个字符串的长度不相等,则无法计算其海明距离。因此,我们的方法首先需要进行长度校验。
如果字符串长度相等,我们就可以逐个字符地比较它们。
public static int hammingDistance(String s1, String s2) {
// 检查字符串长度是否一致
if (s1.length() != s2.length()) {
return -1; // 长度不一致,返回-1
}
int distance = 0;
// 遍历字符串,比较对应位置的字符
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
distance++; // 字符不同,距离加1
}
}
return distance; // 返回计算出的海明距离
}在实际应用中,我们通常需要在一个字符串集合中查找与某个目标字符串海明距离最短的项。main 方法将负责处理用户输入、调用 hammingDistance 方法进行批量计算,并最终输出结果。
立即学习“Java免费学习笔记(深入)”;
我们需要两个数组:一个 String[] 来存储用户输入的字符串列表,一个 int[] 来存储对应的海明距离。Scanner 类用于从控制台读取用户输入。
import java.util.Scanner;
import java.util.Arrays; // 用于打印数组
public class HammingDistanceCalculator {
// ... (hammingDistance 方法放在这里) ...
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 定义存储5个输入字符串的数组
String[] stringList = new String[5];
// 定义存储海明距离的数组
int[] distances = new int[5];
// 1. 读取5个输入字符串
System.out.println("请依次输入5个字符串:");
for (int i = 0; i < 5; i++) {
System.out.print((i + 1) + ". Enter string: ");
stringList[i] = scanner.nextLine();
}
// 2. 读取目标字符串
System.out.print("Enter target: ");
String target = scanner.nextLine();
// 3. 批量计算海明距离
for (int i = 0; i < 5; i++) {
distances[i] = hammingDistance(target, stringList[i]);
}
// 4. 查找最短海明距离及其对应的字符串
int minDistance = Integer.MAX_VALUE; // 初始化为最大整数值
String minDistanceString = null;
boolean foundValidDistance = false; // 标记是否找到有效的海明距离
for (int i = 0; i < 5; i++) {
// 忽略 -1(长度不匹配)的情况
if (distances[i] != -1) {
if (distances[i] < minDistance) {
minDistance = distances[i];
minDistanceString = stringList[i];
foundValidDistance = true;
}
}
}
// 5. 结果输出
System.out.println("Contents of array distances " + Arrays.toString(distances));
if (foundValidDistance) {
System.out.println("String with min Hamming distance: " + minDistanceString);
} else {
System.out.println("No Hamming distance found");
}
scanner.close(); // 关闭Scanner,释放资源
}
// ... (hammingDistance 方法) ...
}在计算出所有距离后,我们需要遍历 distances 数组来找到最小值。在这个过程中,要特别注意跳过那些值为 -1 的项,因为它们表示长度不匹配,不是有效的海明距离。
将 hammingDistance 方法和 main 方法整合到一个类中,形成一个完整的可执行程序。
import java.util.Scanner;
import java.util.Arrays;
public class HammingDistanceCalculator {
/**
* 计算两个字符串的海明距离。
* 如果两个字符串长度不一致,返回-1。
*
* @param s1 第一个字符串
* @param s2 第二个字符串
* @return 海明距离,如果长度不一致则返回-1
*/
public static int hammingDistance(String s1, String s2) {
// 检查字符串长度是否一致
if (s1.length() != s2.length()) {
return -1; // 长度不一致,返回-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];
// 定义存储海明距离的数组
int[] distances = new int[5];
// 1. 读取5个输入字符串
System.out.println("请依次输入5个字符串:");
for (int i = 0; i < 5; i++) {
System.out.print((i + 1) + ". Enter string: ");
stringList[i] = scanner.nextLine();
}
// 2. 读取目标字符串
System.out.print("Enter target: ");
String target = scanner.nextLine();
// 3. 批量计算海明距离
for (int i = 0; i < 5; i++) {
distances[i] = hammingDistance(target, stringList[i]);
}
// 4. 查找最短海明距离及其对应的字符串
int minDistance = Integer.MAX_VALUE; // 初始化为最大整数值,确保任何有效距离都会小于它
String minDistanceString = null;
boolean foundValidDistance = false; // 标记是否找到有效的海明距离
for (int i = 0; i < 5; i++) {
// 忽略 -1(长度不匹配)的情况
if (distances[i] != -1) {
if (distances[i] < minDistance) {
minDistance = distances[i];
minDistanceString = stringList[i];
foundValidDistance = true;
}
}
}
// 5. 结果输出
System.out.println("Contents of array distances " + Arrays.toString(distances));
if (foundValidDistance) {
System.out.println("String with min Hamming distance: " + minDistanceString);
} else {
System.out.println("No Hamming distance found");
}
scanner.close(); // 关闭Scanner,释放资源
}
}本教程详细介绍了如何在 Java 中实现字符串的海明距离计算。通过将核心计算逻辑封装在 hammingDistance 方法中,并利用 main 方法处理输入、批量计算和结果展示,我们构建了一个结构清晰、功能完整的程序。理解海明距离的定义、正确处理长度不匹配的情况,以及有效地在集合中查找最短距离,是实现此类任务的关键。通过本教程,读者应能掌握海明距离的 Java 实现及其在实际应用中的基本模式。
以上就是Java中字符串海明距离的计算与应用教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号