def is_isomorphic(s: str, t: str) -> bool:
    """
    Given two strings s and t, determine if they are isomorphic.
    https://en.wikipedia.org/wiki/Isomorphism
    https://leetcode.com/problems/isomorphic-strings/description/

    Two strings s and t are isomorphic if the characters in s can be
    replaced to get t.

    All occurrences of a character must be replaced with another character
    while preserving the order of characters. No two characters may map to
    the same character, but a character may map to itself.


    >>> is_isomorphic("egg", "add")
    True
    >>> is_isomorphic("foo", "bar")
    False
    >>> is_isomorphic("paper", "title")
    True
    >>> is_isomorphic("ab", "aa")
    False
    """
    if len(s) != len(t):
        return False

    mapping: dict[str, str] = {}
    mapped = set()

    for char_s, char_t in zip(s, t):
        if char_s in mapping:
            if mapping[char_s] != char_t:
                return False
        else:
            if char_t in mapped:
                return False
            mapping[char_s] = char_t
            mapped.add(char_t)

    return True


if __name__ == "__main__":
    import doctest

    doctest.testmod()

    print(is_isomorphic("egg", "add"))  # True
