Hamming 距离是两个等长字符串之间的差异度量,表示两个字符串在相应位置上不同字符的数量。它常用于错误检测和纠正、以及生物信息学中的 DNA 序列分析等领域。
下面是一些关于如何计算 Hamming 距离的示例,包括不同编程语言的实现。
Rust 实现
fn hamming_distance(s1: &str, s2: &str) -> Result<usize, &'static str> {
if s1.len() != s2.len() {
return Err("Strings must be of equal length");
}
Ok(s1.chars().zip(s2.chars()).filter(|(c1, c2)| c1 != c2).count())
}
fn main() {
let s1 = "karolin";
let s2 = "kathrin";
match hamming_distance(s1, s2) {
Ok(distance) => println!("Hamming distance: {}", distance),
Err(err) => println!("Error: {}", err),
}
}
C++ 实现
#include <iostream>
#include <string>
#include <stdexcept>
int hamming_distance(const std::string& s1, const std::string& s2) {
if (s1.length() != s2.length()) {
throw std::invalid_argument("Strings must be of equal length");
}
int distance = 0;
for (size_t i = 0; i < s1.length(); ++i) {
if (s1[i] != s2[i]) {
++distance;
}
}
return distance;
}
int main() {
std::string s1 = "karolin";
std::string s2 = "kathrin";
try {
int distance = hamming_distance(s1, s2);
std::cout << "Hamming distance: " << distance << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
}
Python 实现
def hamming_distance(s1, s2):
if len(s1) != len(s2):
raise ValueError("Strings must be of equal length")
return sum(c1 != c2 for c1, c2 in zip(s1, s2))
if __name__ == "__main__":
s1 = "karolin"
s2 = "kathrin"
try:
distance = hamming_distance(s1, s2)
print(f"Hamming distance: {distance}")
except ValueError as e:
print(f"Error: {e}")
JavaScript 实现
function hammingDistance(s1, s2) {
if (s1.length !== s2.length) {
throw new Error("Strings must be of equal length");
}
let distance = 0;
for (let i = 0; i < s1.length; i++) {
if (s1[i] !== s2[i]) {
distance++;
}
}
return distance;
}
const s1 = "karolin";
const s2 = "kathrin";
try {
const distance = hammingDistance(s1, s2);
console.log(`Hamming distance: ${distance}`);
} catch (e) {
console.error(`Error: ${e.message}`);
}
解释
- 输入检查:所有实现都检查输入字符串的长度是否相等。如果长度不相等,就会抛出错误或返回错误信息。
- 计算距离:通过遍历字符串,比较相应位置的字符是否相同,如果不同则增加距离计数器。
这些实现展示了如何在不同编程语言中计算 Hamming 距离,适用于各种应用场景。