Added HammingDistance.js and HammingDistance.test.js in String directory

This commit is contained in:
AbhinavXT
2021-07-11 16:30:23 +05:30
parent a55248a3b7
commit 7af96ae1cc
2 changed files with 53 additions and 0 deletions

32
String/HammingDistance.js Normal file
View File

@ -0,0 +1,32 @@
/**
* Hamming Distance: https://en.wikipedia.org/wiki/Hamming_distance
*
*
* Hamming distance is a metric for comparing two binary data strings.
*
* While comparing two binary strings of equal length, Hamming distance
* is the number of bit positions in which the two bits are different.
* The Hamming distance between two strings, a and b is denoted as d(a,b)
*/
/**
* @param {string} a
* @param {string} b
* @return {number}
*/
export const hammingDistance = (a, b) => {
if (a.length !== b.length) {
throw new Error('Strings must be of the same length')
}
let distance = 0
for (let i = 0; i < a.length; i += 1) {
if (a[i] !== b[i]) {
distance += 1
}
}
return distance
}

View File

@ -0,0 +1,21 @@
import { hammingDistance } from '../HammingDistance'
test('should throw an error when trying to compare the strings of different length', () => {
const compareStringsOfDifferentLength = () => {
hammingDistance('abc', 'abcd')
}
expect(compareStringsOfDifferentLength).toThrowError()
})
test('should calculate difference between two strings', () => {
expect(hammingDistance('a', 'a')).toBe(0)
})
test('should calculate difference between two strings', () => {
expect(hammingDistance('abc', 'add')).toBe(2)
})
test('should calculate difference between two strings', () => {
expect(hammingDistance('1011101', '1001001')).toBe(2)
})