[LeetCode] #290 Word Pattern (Easy)
LeetCode 第 290 題 Word Pattern,難度 Easy
用 Python3 解 LeetCode 系列,Word Pattern
,屬於 Easy
原始題目
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
.
Example 1:
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Example 2:
Input: pattern = "abba", s = "dog cat cat fish"
Output: false
Example 3:
Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false
Example 4:
Input: pattern = "abba", s = "dog dog dog dog"
Output: false
題目分析
- 給你一個模式
pattern
和s
- pattern 裡的每個字母對應
s
一個單字,相同字母單字必須一樣 - 判斷
s
是否符合pattern
解題過程
- 長度判斷,如果
pattern
字母數量和s
單字數量不同,一定就是 false mapping_dict
的 key 是pattern
的字母,值是同 index 的s
內容exist_check_dict
的 key 是s
的單字,值是pattern
的字母- 遍歷
pattern
所有值 - 檢查當前
pattern
字母為 key 的mapping_dict
資料,和s
中相同位置的單字有沒有一樣 - 檢查和當前
pattern
字母同 index 的 s 單字所對應的字母和exist_check_dict
紀錄中的字母有沒有一樣
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
# 長度判斷,如果不同長度一定就是 false
words_list = s.split(' ')
words_len = len(words_list)
pattern_len = len(pattern)
if words_len != pattern_len:
return False
mapping_dict = dict()
exist_check_dict = dict()
for index, val in enumerate(pattern):
# 如果 pattern key 存在
if val in mapping_dict.keys():
# 檢查 pattern 字母代表的單字是否一致
if mapping_dict[val] != words_list[index]:
return False
else:
# 檢查有沒有重複的單字在不同字母中
if words_list[index] in exist_check_dict:
if exist_check_dict[words_list[index]] != val:
return False
else :
mapping_dict[val] = words_list[index]
exist_check_dict[words_list[index]] = val
return True