public class Hamming {
private final int hammingDistance;
public Hamming(String leftStrand, String rightStrand) {
hammingDistance = computeHammingDistance(leftStrand, rightStrand);
}
public int getHammingDistance() {
return hammingDistance;
}
private int computeHammingDistance(String leftStrand, String rightStrand) {
if(leftStrand.length() != rightStrand.length()) {
throw new IllegalArgumentException("leftStrand and rightStrand must be of equal length.");
}
final int length = Math.min(leftStrand.length(), rightStrand.length());
int distance = 0;
for (int i = 0; i < length; i++) {
distance += hammingContributionAt(i, leftStrand, rightStrand);
}
return distance;
}
private int hammingContributionAt(int index, String leftStrand, String rightStrand) {
return leftStrand.charAt(index) != rightStrand.charAt(index) ? 1 : 0;
}
}