Den Dribbles

Python Anagrams

April 25, 2019

Test file

Create file anagrams_test.py:

import unittest
import anagrams


class AnagramsTest(unittest.TestCase):
    def test_anagrams(self):
        assess = [
            {
                "inputA": "toyko",
                "inputB": "kyoto",
                "expectation": True
            },
            {
                "inputA": "toyko",
                "inputB": "kyotoooo",
                "expectation": False
            },
            {
                "inputA": "t!!o.9    yko",
                "inputB": "kyoto",
                "expectation": True
            },
            {
                "inputA": "racecar",
                "inputB": "carrace",
                "expectation": True
            },
            {
                "inputA": "TOKYO",
                "inputB": "kyoto",
                "expectation": True
            }
        ]
        for test in assess:
            self.assertEqual(anagrams.isAnagram(
                test["inputA"], test["inputB"]), test["expectation"])


if __name__ == '__main__':
    unittest.main()

Anagrams

Create file anagrams.py.

import re


def isAnagram(strA, strB):
    reStrA = re.sub("[^a-zA-Z]", "", strA).strip().lower()
    reStrB = re.sub("[^a-zA-Z]", "", strB).strip().lower()

    print(reStrA)
    print(reStrB)

    dictA = {}
    for c in reStrA:
        if c in dictA.keys():
            dictA[c] = dictA[c] + 1
        else:
            dictA[c] = 1

    dictB = {}
    for c in reStrB:
        if c in dictB.keys():
            dictB[c] = dictB[c] + 1
        else:
            dictB[c] = 1

    if len(dictA) != len(dictB):
        return False

    for c in dictA:
        if dictB[c] == None:
            return False
        if dictA[c] != dictB[c]:
            return False
    return True

Running tests

Change into directory and run python3 -m pytest -v anagrams_test.py.


A personal blog on all things of interest. Written by Dennis O'Keeffe, Follow me on Twitter