zoukankan      html  css  js  c++  java
  • LeetCode--205--同构字符串

    问题描述:

    给定两个字符串 和 t,判断它们是否是同构的。

    如果 中的字符可以被替换得到 ,那么这两个字符串是同构的。

    所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

    示例 1:

    输入: s = "egg", t = "add"
    输出: true
    

    示例 2:

    输入: s = "foo", t = "bar"
    输出: false

    示例 3:

    输入: s = "paper", t = "title"
    输出: true

    官方1:

    1 class Solution(object):
    2     def isIsomorphic(self, s, t):
    3         """
    4         :type s: str
    5         :type t: str
    6         :rtype: bool
    7         """
    8         return len(set(s)) == len(set(t)) == len(set(zip(s,t)))

    >>>a = [1,2,3]
    >>> b = [4,5,6]
    >>> c = [4,5,6,7,8]
    >>> zipped = zip(a,b)     # 返回一个对象
    >>> zipped
    <zip object at 0x103abc288>
    >>> list(zipped)  # list() 转换为列表
    [(1, 4), (2, 5), (3, 6)]
    >>> list(zip(a,c))              # 元素个数与最短的列表一致
    [(1, 4), (2, 5), (3, 6)]

    >>> a1, a2 = zip(*zip(a,b))          # 与 zip 相反,*zip 可理解为解压,返回二维矩阵式
    >>> list(a1)
    [1, 2, 3]
    >>> list(a2)
    [4, 5, 6]
    >>>

    未用过的defaultdict:

     1 from collections import defaultdict
     2 class Solution(object):
     3     def isIsomorphic(self, s, t):
     4         """
     5         :type s: str
     6         :type t: str
     7         :rtype: bool
     8         """
     9         alpdict1 = defaultdict(int)
    10         alpdict2 = defaultdict(int)
    11         for i in range(len(s)):
    12             sc = s[i]
    13             st = t[i]
    14             if alpdict1[sc] != alpdict2[st]:
    15                 return False
    16             alpdict1[sc] = i+1
    17             alpdict2[st] = i+1
    18         return True

    同时放进dict,其分配的value是相同的。

    待看:

     1 class Solution(object):        
     2     def isIsomorphic(self, s, t):
     3         """
     4         :type s: str
     5         :type t: str
     6         :rtype: bool
     7         """
     8         if len(s) != len(t): return False
     9         n = len(s)
    10         if n == 0: return True
    11         
    12         sa = s[0]
    13         ta = t[0]
    14         
    15         m = {}
    16         for i in range(1,n):
    17             if (s[i] == sa and t[i] != ta) or (s[i] != sa and t[i] == ta): return False
    18             elif s[i] != sa and t[i] != ta: 
    19                 if sa not in m: m[sa] = ta
    20                 elif m[sa] != ta: return False
    21                 sa = s[i]
    22                 ta = t[i]
    23         if sa in m and m[sa] != ta: return False
    24         return True

    2018-09-18 20:48:59

  • 相关阅读:
    洛谷P4315 月下“毛景树”(边权维护)
    Water Tree CodeForces
    P3384 【模板】树链剖分
    Codeforces 161D Distance in Tree(树的点分治)
    git命令及使用方法
    vue下拉刷新,下拉加载更多
    Vue中 v-for 生成样式并默认选中第一个样式
    js面向对象实现分页版轮播图
    js面向对象实现购物车
    js面向对象实现放大镜
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/9671351.html
Copyright © 2011-2022 走看看