1. 程式人生 > 實用技巧 >LeetCode #290. Word Pattern

LeetCode #290. Word Pattern

題目

290. Word Pattern


解題方法

先把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