mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
83 lines
1.8 KiB
Python
83 lines
1.8 KiB
Python
"""
|
|||
|
|
290. Word Pattern
|
||
|
|
Difficulty: Easy
|
||
|
|
https://leetcode.com/problems/word-pattern/
|
||
|
|
|
||
|
|
──────────────────────────────────────────────────
|
||
|
|
|
||
|
|
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. Specifically:
|
||
|
|
|
||
|
|
• Each letter in pattern maps to exactly one unique word in s.
|
||
|
|
|
||
|
|
• Each unique word in s maps to exactly one letter in pattern.
|
||
|
|
|
||
|
|
• No two letters map to the same word, and no two words map to the
|
||
|
|
same letter.
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
Example 1:
|
||
|
|
|
||
|
|
Input: pattern = "abba", s = "dog cat cat dog"
|
||
|
|
|
||
|
|
Output: true
|
||
|
|
|
||
|
|
Explanation:
|
||
|
|
|
||
|
|
The bijection can be established as:
|
||
|
|
|
||
|
|
• 'a' maps to "dog".
|
||
|
|
|
||
|
|
• 'b' maps to "cat".
|
||
|
|
|
||
|
|
Example 2:
|
||
|
|
|
||
|
|
Input: pattern = "abba", s = "dog cat cat fish"
|
||
|
|
|
||
|
|
Output: false
|
||
|
|
|
||
|
|
Example 3:
|
||
|
|
|
||
|
|
Input: pattern = "aaaa", s = "dog cat cat dog"
|
||
|
|
|
||
|
|
Output: false
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
Constraints:
|
||
|
|
|
||
|
|
• 1 <= pattern.length <= 300
|
||
|
|
|
||
|
|
• pattern contains only lower-case English letters.
|
||
|
|
|
||
|
|
• 1 <= s.length <= 3000
|
||
|
|
|
||
|
|
• s contains only lowercase English letters and spaces ' '.
|
||
|
|
|
||
|
|
• s does not contain any leading or trailing spaces.
|
||
|
|
|
||
|
|
• All the words in s are separated by a single space.
|
||
|
|
"""
|
||
|
|
|
||
|
|
|
||
|
|
class Solution:
|
||
|
|
def wordPattern(self, pattern: str, s: str) -> bool:
|
||
|
|
if len(pattern) != len(s.split()):
|
||
|
|
return False
|
||
|
|
|
||
|
|
words = s.split()
|
||
|
|
map = {}
|
||
|
|
|
||
|
|
for i in range(len(pattern)):
|
||
|
|
c = pattern[i]
|
||
|
|
w = words[i]
|
||
|
|
|
||
|
|
if c in map and map[c] != w:
|
||
|
|
return False
|
||
|
|
else:
|
||
|
|
map[c] = w
|
||
|
|
|
||
|
|
return len(set(pattern)) == len(set(words))
|