
本文档详细介绍了如何在 Java 中计算两个字符串之间的汉明距离。汉明距离是两个等长字符串之间,对应位置上不同字符的个数。本文将提供一个 hammingDistance 方法的实现,该方法接收两个字符串作为输入,并返回它们的汉明距离。如果字符串长度不一致,则返回 -1。此外,还将演示如何在主方法中使用该方法,并结合数组操作,找到与目标字符串汉明距离最小的字符串。
汉明距离的计算
汉明距离是信息论中的一个重要概念,用于衡量两个等长字符串之间的差异。它表示将一个字符串转换成另一个字符串所需要替换的字符个数。
hammingDistance 方法的实现
以下是一个计算汉明距离的 Java 方法:
public class HammingDistance {      public static int hammingDistance(String str1, String str2) {         // 检查字符串长度是否相等         if (str1.length() != str2.length()) {             return -1; // 如果长度不一致,返回 -1         }          int distance = 0;         // 遍历字符串,比较对应位置的字符         for (int i = 0; i < str1.length(); i++) {             if (str1.charAt(i) != str2.charAt(i)) {                 distance++; // 如果字符不同,距离加 1             }         }          return distance; // 返回汉明距离     }      public static void main(String[] args) {         // 示例用法         String str1 = "dog";         String str2 = "dig";         int distance = hammingDistance(str1, str2);         System.out.println("The Hamming distance between "" + str1 + "" and "" + str2 + "" is: " + distance); // 输出:1          String str3 = "cat";         String str4 = "car";         distance = hammingDistance(str3, str4);         System.out.println("The Hamming distance between "" + str3 + "" and "" + str4 + "" is: " + distance); // 输出:1          String str5 = "hello";         String str6 = "world";         distance = hammingDistance(str5, str6);         System.out.println("The Hamming distance between "" + str5 + "" and "" + str6 + "" is: " + distance); // 输出:4          String str7 = "short";         String str8 = "longer";         distance = hammingDistance(str7, str8);         System.out.println("The Hamming distance between "" + str7 + "" and "" + str8 + "" is: " + distance); // 输出:-1     } }
代码解释:
立即学习“Java免费学习笔记(深入)”;
- 长度检查: 首先,该方法检查输入的两个字符串 str1 和 str2 的长度是否相等。如果长度不相等,则直接返回 -1,因为汉明距离只适用于等长字符串。
- 距离计算: 如果字符串长度相等,则初始化一个变量 distance 为 0。然后,使用一个循环遍历字符串的每个字符。
- 字符比较: 在循环中,比较 str1 和 str2 在相同位置 i 上的字符。如果字符不相同,则将 distance 加 1。
- 返回值: 循环结束后,distance 变量存储了汉明距离,该方法返回 distance。
在 main 方法中使用 hammingDistance
以下是如何在 main 方法中使用 hammingDistance 方法的示例:
import java.util.Scanner;  public class Main {      public static int hammingDistance(String str1, String str2) {         if (str1.length() != str2.length()) {             return -1;         }          int distance = 0;         for (int i = 0; i < str1.length(); i++) {             if (str1.charAt(i) != str2.charAt(i)) {                 distance++;             }         }          return distance;     }      public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);          // 创建字符串数组和距离数组         String[] stringList = new String[5];         int[] distances = new int[5];          // 读取 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] = hammingDistance(stringList[i], target);         }          // 查找最小汉明距离         int minDistance = Integer.MAX_VALUE;         int minIndex = -1;         for (int i = 0; i < 5; i++) {             if (distances[i] != -1 && distances[i] < minDistance) {                 minDistance = distances[i];                 minIndex = i;             }         }          // 输出结果         System.out.print("Contents of array distances: ");         for (int i = 0; i < 5; i++) {             System.out.print(i + " " + distances[i] + " ");         }         System.out.println();          if (minIndex != -1) {             System.out.println("String with min Hamming distance: " + stringList[minIndex]);         } else {             System.out.println("No Hamming distance found");         }          scanner.close();     } }
代码解释:
立即学习“Java免费学习笔记(深入)”;
- 输入读取: 使用 Scanner 类从控制台读取 5 个字符串和一个目标字符串。
- 距离计算: 循环遍历 stringList 数组,调用 hammingDistance 方法计算每个字符串与目标字符串的汉明距离,并将结果存储在 distances 数组中。
- 查找最小值: 循环遍历 distances 数组,找到最小的汉明距离(不包括 -1)。
- 输出结果: 输出 distances 数组的内容,并输出与目标字符串汉明距离最小的字符串。如果所有距离都是 -1,则输出 “No Hamming distance found”。
注意事项
- 汉明距离只能用于等长字符串。如果字符串长度不一致,需要进行处理,例如截断、填充或者返回错误信息。
- 在计算汉明距离时,需要确保字符编码一致。如果字符编码不一致,可能会导致计算结果错误。
- 在实际应用中,可以根据需要对汉明距离进行归一化,例如除以字符串长度,以便比较不同长度字符串之间的差异。
总结
本文介绍了如何在 Java 中计算字符串的汉明距离,并提供了一个完整的示例代码。通过本文的学习,您应该能够理解汉明距离的概念,并能够使用 Java 实现汉明距离的计算。此外,您还了解了如何在实际应用中使用汉明距离,例如查找与目标字符串最相似的字符串。