From 89fc7bf0b024e4c9508db80f575efd5b5616f932 Mon Sep 17 00:00:00 2001 From: Sedat Aybars Nazlica Date: Wed, 6 Jul 2022 16:19:13 +0900 Subject: [PATCH] Add hamming distance (#6194) * Add hamming distance * Fix doctest * Refactor * Raise ValueError when string lengths are different --- strings/hamming_distance.py | 39 +++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 strings/hamming_distance.py diff --git a/strings/hamming_distance.py b/strings/hamming_distance.py new file mode 100644 index 000000000..b8feaef06 --- /dev/null +++ b/strings/hamming_distance.py @@ -0,0 +1,39 @@ +def hamming_distance(string1: str, string2: str) -> int: + """Calculate the Hamming distance between two equal length strings + In information theory, the Hamming distance between two strings of equal + length is the number of positions at which the corresponding symbols are + different. https://en.wikipedia.org/wiki/Hamming_distance + + Args: + string1 (str): Sequence 1 + string2 (str): Sequence 2 + + Returns: + int: Hamming distance + + >>> hamming_distance("python", "python") + 0 + >>> hamming_distance("karolin", "kathrin") + 3 + >>> hamming_distance("00000", "11111") + 5 + >>> hamming_distance("karolin", "kath") + ValueError: String lengths must match! + """ + if len(string1) != len(string2): + raise ValueError("String lengths must match!") + + count = 0 + + for char1, char2 in zip(string1, string2): + if char1 != char2: + count += 1 + + return count + + +if __name__ == "__main__": + + import doctest + + doctest.testmod()