我需要在两个长度相等的字符串之间应用汉明距离。我使用下面的代码
private int HD(String d1, String d2){
return (d1.equals(d2)) ? 0 : 1;
} 那么代码的编写方式是正确的吗?
发布于 2017-01-04 13:29:42
Hamming Distance计算两个字符串之间的距离,但它们的长度必须相等。
它测量两个字符串相等的最小替换次数。
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;
}您所做的只是比较两个字符串的长度,这是不必要的。
发布于 2017-01-04 13:33:14
两个长度相等的字符串之间的汉明距离是相应符号不同的位置数。换句话说,它是将一个字符串更改为另一个字符串所需的最小替换次数。例如,"cat“和"mat”之间的汉明距离是1。
您的代码似乎只是检查两个字符串的长度是否相等。下面的汉明距离代码源码可能会对你有所帮助。
发布于 2017-01-04 15:51:37
你的代码只是检查2个字符串是否相等,如果相等,则返回0,否则返回1。它不会显示汉明距离。
什么是汉明距离?
汉明距离只是比较字符串的相同索引处字母表中差异的数量,因此它告诉您必须替换的数量,才能使2个字符串相等。
示例:
假设我有两个长度相等的字符串"ABCD“和"ACCC”。在本例中,两个字符串中的第一个和倒数第二个字符相同,因此您需要在第二个字符串中替换2个字符以使其相同。因此,在本例中,hamming distance为2。
a、b、c、d
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;
}https://stackoverflow.com/questions/41456717
复制相似问题