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
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