WordPattern
Problem
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
patternmaps to exactly one unique word ins.Each unique word in
smaps to exactly one letter inpattern.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 <= 300patterncontains only lower-case English letters.1 <= s.length <= 3000scontains only lowercase English letters and spaces' '.sdoes not contain any leading or trailing spaces.All the words in
sare separated by a single space.
Solution
Split s into a list of words. The problem reduces to IsomorphicStrings but
with characters in pattern and elements in s. Since pattern and
s can have different lenghts, we first check that they have the same
length.
Pattern
Hash Table, String
Code
def wordPattern(pattern: str, s: str) -> bool:
"""Given a pattern and a string s, finds if ``s`` follows the same pattern.
"""
words = s.split()
if len(pattern) != len(words):
return False
d = {}
d_range = set()
for char, word in zip(pattern, words):
if char in d:
if d[char] != word:
return False
else:
if word in d_range:
return False
else:
d[char] = word
d_range.add(word)
return True
Test
>>> from WordPattern import wordPattern
>>> wordPattern('abba', 'dog cat cat dog')
True
>>> wordPattern('abba', 'dog cat cat fish')
False
>>> wordPattern('aaaa', 'dog cat cat dog')
False
- WordPattern.wordPattern(pattern: str, s: str) bool
Given a pattern and a string s, finds if
sfollows the same pattern.