LeetCode--205--同構字符串
阿新 • • 發佈:2018-09-18
list() 不能 racket false -- 兩個 span nbsp bracket
問題描述:
給定兩個字符串 s 和 t,判斷它們是否是同構的。
如果 s 中的字符可以被替換得到 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--同構字符串