Given two strings s and t, determine if they are isomorphic.
Two strings 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.
For example,
Given "egg"
, "add"
, return true.
Given "foo"
, "bar"
, return false.
Given "paper"
, "title"
, return true.
Note:
You may assume both s and t have the same length.
Solution: create two dictionaries, 1st dictionary: use 1st string's char as key, 2nd string's char as value. Vice versa for 2nd dictionary.
创建两个字典来反映两个字符串中的映射关系:
s_dict[s[i]] = t[i]
t_dict[t[i]] = s[i]
当映射关系不等时则返回False
Time Complexity: O(n)
class Solution:
# @param {string} s
# @param {string} t
# @return {boolean}
def isIsomorphic(self, s, t):
if len(s) != len(t):
return False
s_dict = {}
t_dict = {}
for i in range(len(s)):
if s[i] in s_dict.keys() and s_dict[s[i]] != t[i]:
return False
if t[i] in t_dict.keys() and t_dict[t[i]] != s[i]:
return False
s_dict[s[i]] = t[i]
t_dict[t[i]] = s[i]
return True
Test Cases:
s = Solution()
print s.isIsomorphic('app', 'bcc') == True
print s.isIsomorphic('app', 'bc') == False
print s.isIsomorphic('appasdf', 'bccb528') == True
print s.isIsomorphic('appd3', 'bcc3r') == True
print s.isIsomorphic('appd3p', 'bcc3re') == False