iT邦幫忙

0

leetcode with python:290. Word Pattern

  • 分享至 

  • xImage
  •  

題目:

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

給定一個模式跟一個字串,判斷字串是否遵循格式
ex:input: pattern = "abba",s = "dog cat cat dog"=>output: true
input: pattern = "abba", s = "dog cat cat fish"=>output: false

這題感覺解法上很像205.
都是建立hash map判斷兩字串元素是否為一對一關係
不過這次的關係會是字元對應到詞

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        s=s.split(' ')
        
        if len(s)!=len(pattern):
            return False
        
        d={}
        for i in range(len(pattern)):
            if pattern[i] not in d:
                if s[i] in d.values():
                    return False
                else:
                    d[pattern[i]]=s[i]
            else:
                if d[pattern[i]]!=s[i]:
                    return False

        return True

pattern表模式,而split字串s讓其變為詞語陣列,設dictionary為d存放對應關係
假如pattern和s長度不同就直接return False
畢竟長度不同怎麼可能對應得到pattern
從頭開始存放關係(pattern[i]是key,s[i]是value),會出現以下幾種可能

**(1)pattern[i]不存在key中且s[i]不存在value中:**發現新對應關係,紀錄

**(2)pattern[i]不存在key中但s[i]存在value中:**發現非一對一關係,return False

**(3)pattern[i]存在key中且對應值和s[i]相同:**發現重複的關係而已,無視

**(4)pattern[i]存在key中但對應值和s[i]不同:**發現非一對一關係,return False

若紀錄完都沒發現非一對一關係就return True
沒錯這題解法真的很像很像205.
最後執行時間28ms(faster than 96.83%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言