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
posted @ 2019-08-04 17:28  NeoZy  阅读(95)  评论(0编辑  收藏  举报