码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode--205--同构字符串

时间:2018-09-18 22:58:18      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:set   int   leetcode   分配   不能   判断   import   style   元素   

问题描述:

给定两个字符串 和 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

LeetCode--205--同构字符串

标签:set   int   leetcode   分配   不能   判断   import   style   元素   

原文地址:https://www.cnblogs.com/NPC-assange/p/9671351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!