竟然这样ac了,我只是试了一下。。。想法就是对于每一个字符串都建立一个哈希表,统计他们各个字母的数量,对于相同位置上的字母,两个字符串对于字母数量是一样的,但这样还可能出现abab 和 aabb这种情况,因此还要加上一条判断相邻位置上字母是否相等:
class Solution(object):
def isIsomorphic(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(t) != len(s):
return False
dic1 = {}
dic2 = {}
i = 0
while i < len(s):
if s[i] not in dic1:
dic1[s[i]] = 1
else:
dic1[s[i]] += 1
if t[i] not in dic2:
dic2[t[i]] = 1
else:
dic2[t[i]] += 1
i += 1
for i in range(len(s)):
if dic1[s[i]] != dic2[t[i]]:
return False
if i > 0 and s[i] == s[i-1] and t[i] != t[i-1]:
return False
if i > 0 and s[i] != s[i-1] and t[i] == t[i-1]:
return False
return True
网上提供的做法有很多种,其中一种是建立一个s到t映射的哈希表,最后考虑去重:
class Solution(object):
def isIsomorphic(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(t) != len(s):
return False
dic = {}
for i in range(len(s)):
if s[i] not in dic:
dic[s[i]] = t[i]
else:
if dic[s[i]] != t[i]:
return False
m = [dic[k] for k in dic]
return len(m) == len(set(m))