mirror of
https://github.com/TheAlgorithms/Python.git
synced 2026-09-28 13:33:11 +08:00
* added isomorphic strings Signed-off-by: JeevaRamanathan <jeevaramanathan.m@infosys.com> * updating DIRECTORY.md * Update docstring with external references Added links to Wikipedia and LeetCode for reference. --------- Signed-off-by: JeevaRamanathan <jeevaramanathan.m@infosys.com> Co-authored-by: JeevaRamanathan <JeevaRamanathan@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com>
49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
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
|