Question
Given a pattern
and a string str
, find if str
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 str
.
Example 1:
Input: pattern = "abba", str = "dog cat cat dog"
Output: true
Example 2:
Input:pattern = "abba", str = "dog cat cat fish"
Output: false
Example 3:
Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false
Example 4:
Input: pattern = "abba", str = "dog dog dog dog"
Output: false
Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.
Solution
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
str = str.strip().split(' ')
if len(str) != len(pattern):
return False
pattern_dict = dict()
seen_words = set()
for i, c in enumerate(pattern):
if c in pattern_dict:
if str[i] != pattern_dict[c]:
return False
else:
if str[i] not in seen_words:
pattern_dict[c] = str[i]
seen_words.add(str[i])
else:
return False
return True