LeetCode #290. Word Pattern
阿新 • • 發佈:2020-12-07
題目
解題方法
先把s按照空格分成一個詞語列表s_slice,然後看看s_slice的長度是不是和pattern一樣,不一樣要返回False的。之後設定兩個字典dic1和dic2,分別儲存s_slice到pattern的對映和pattern到s_slice的對映,如果出現同鍵不同值的情況就返回False,迴圈最後還要判斷一下兩個字典之間的對映是否是相互的,也就是說a->b同樣要有b->a,不然就是False了。迴圈結束都沒啥問題的話就可以返回True了。
時間複雜度:O(n)
空間複雜度:O(n)
程式碼
class Solution: def wordPattern(self, pattern: str, s: str) -> bool: s_slice = s.split(" ") if len(s_slice) != len(pattern): return False dic1 = {} dic2 = {} for i in range(len(s_slice)): if s_slice[i] not in dic1: dic1[s_slice[i]] = pattern[i] else: if dic1[s_slice[i]] != pattern[i]: return False if pattern[i] not in dic2: dic2[pattern[i]] = s_slice[i] else: if dic2[pattern[i]] != s_slice[i]: return False if dic1[s_slice[i]] != pattern[i] or dic2[pattern[i]] != s_slice[i]: return False return True