【发布时间】:2017-05-18 07:47:45
【问题描述】:
我需要在两个相等长度的字符串之间应用汉明距离。我使用下面的代码
private int HD(String d1, String d2){
return (d1.equals(d2)) ? 0 : 1;
}
那么代码写对了吗?
【问题讨论】:
-
您的代码检查两个字符串是否相等。它不计算汉明距离,即不同字符的位置数。
标签: java
我需要在两个相等长度的字符串之间应用汉明距离。我使用下面的代码
private int HD(String d1, String d2){
return (d1.equals(d2)) ? 0 : 1;
}
那么代码写对了吗?
【问题讨论】:
标签: java
汉明距离计算两个字符串之间的距离,但它们的长度必须相等。
它测量两个字符串相等的最小替换次数。
private int HammingDistance(String One, String Two)
{
if (One.length() != Two.length())
return -1;
int counter = 0;
for (int i = 0; i < One.length(); i++)
{
if (One.charAt(i) != Two.charAt(i)) counter++;
}
return counter;
}
您所做的只是比较两个字符串的长度,这是不需要的。
【讨论】:
return counter; 计数器本身有一个字符串中要替换的字符总数。
两个相等长度的字符串之间的汉明距离是对应符号不同的位置数。换句话说,它是将一个字符串更改为另一个字符串所需的最少替换次数。例如,“cat”和“mat”之间的汉明距离为 1。
您的代码似乎只是检查两个字符串的长度是否相等。以下汉明距离的代码源可能会对您有所帮助。
【讨论】:
您的代码只是检查 2 个字符串是否相等,如果相等则返回 0,否则返回 1。 它没有说汉明距离。
什么是汉明距离?
汉明距离只不过是比较字符串的同一索引处字母表中的差异数量,因此告诉您必须使 2 个字符串相等的替换次数。
例子:
假设我有 2 个长度相等的字符串“ABCD”和“ACCC”。在此示例中,两个字符串中的第一个和倒数第二个相同,因此您需要在 2nd 中替换 2 个字符以使其相同,因此在这种情况下,汉明距离为 2。
A B C D
A C C C
.......
0 1 0 1
所以总汉明距离为 1 + 1 = 2。
汉明距离程序:
private int getHD(String d1, String d2) {
int distance = 0;
if (d1 == null || d2 == null) {
System.out.println("Either String is null");
System.exit(0); // or throw a RuntimeException here
}
d1 = d1.toUpperCase();
d2 = d2.toUpperCase();
if (d1.length() != d2.length()) {
System.out.println("The string are not equal in length.");
System.exit(0); //or throw a RuntimeException here
}
for (int i = 0; i < d1.length(); i++) {
if (d1.charAt(i) != d2.charAt(i))
distance++;
}
return distance;
}
【讨论】: