205. Isomorphic Strings

竟然这样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))
                

你可能感兴趣的:(205. Isomorphic Strings)