1. 程式人生 > 實用技巧 >每日一題20201216(290. 單詞規律)

每日一題20201216(290. 單詞規律)

290. 單詞規律

思路

首先要理解清楚題目的意思,就好像孫亞龍給盧本偉起外號一樣,盧本偉的外號,大家都知道:五五開

但是你不能明著叫,所以你用aab進行代替,這個題目可以說很符合這個場景了!所以現在要做的是,判斷五五開是不是aab,判斷aab是不是五五開。

首先我們維護2個map, 一個存放a->五的對映關係, 一個存放五->a的對映關係。

為什麼需要2個map, 你想,adb->五五開, 這樣的對映,你只儲存了a->五,並沒有儲存五->a,所以adb->五五開也能通過,但這不符合題意。

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        # mp1: a -> wu
        mp1 = {}
        # mp2: wu -> a
        mp2 = {}
        # 切割字串為陣列
        b = s.split(" ")
        # 如果長度不一樣 直接return False
        if len(pattern) != len(b):
            return False
        # 長度一樣可以盡情zip
        for x, y in zip(pattern, b):
            # a -> wu 如果檢測失敗,直接return
            if mp1.get(x) is not None and mp1.get(x) != y:
                return False
            # wu -> a 如果檢測失敗, 直接return
            if mp2.get(y) is not None and mp2.get(y) != x:
                return False
            # 建立a->wu和wu->a的對映關係
            mp1[x] = y
            mp2[y] = x
        return True

寫完題解了,終於可以坐下了。