205. 同构字符串
一开始写的是用两个字典,将两个字符串的不同元素作为键,值是一个列表,保存该字符串中等于当前键的索引,如abcccdd字符串的字典为:{a:[0],b:[1],c:[2,3,4],d:[5,6]}。然后将两个字典的values()取出进行比较。
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
dic1,dic2={},{}
siz=len(s)
if not siz:
return True
for i in range(siz):
if s[i] in dic1:
dic1[s[i]].append(i)
else:
dic1[s[i]]=[i]
if t[i] in dic2:
dic2[t[i]].append(i)
else:
dic2[t[i]]=[i]
if dic1[s[i]]!=dic2[t[i]]:
return False
return list(dic1.values())==list(dic2.values())
后面看了评论区大神的代码。还是俩字典dic_s、dic_t,每次遍历到索引i的时候,分别将s[i]、t[i]作为两个字典的键和值,思想就是如果前面遍历时,同一索引两字符串的元素不同分别为a,b,那么两个字典各自存储dic1[a]=b,dic2[b]=a,后面的遍历中如果又碰到s[i]==a,那说明字符串s的这一位与之前那一位都是a,那么字符串t的这一位和之前那一位也应该是一样的b。如果dic1[a]!=t[i]或dic2[b]!=s[i]就说明两字符串不相似。
大神的代码:
class Solution:
def isIsomorphic(self, s: str, t: str) -> bool:
dic1,dic2={},{}
for i in range(len(s)):
if s[i] not in dic1 and t[i] not in dic2:
dic1[s[i]]=t[i]
dic2[t[i]]=s[i]
else:
try:
if dic1[s[i]]!=t[i] or dic2[t[i]]!=s[i]:
return False
except:
return False
return True
进击的小🐴农