290 Word Pattern
Given apatternand a stringstr, find ifstrfollows the same pattern.
Here follow means a full match, such that there is a bijection between a letter inpatternand a non-empty word instr.
Examples:
pattern =
"abba", str ="dog cat cat dog"should returntrue.pattern =
"abba", str ="dog cat cat fish"should returnfalse.pattern =
"aaaa", str ="dog cat cat dog"should returnfalse.pattern =
"abba", str ="dog dog dog dog"should returnfalse.
Notes:
You may assumepatterncontains only lowercase letters, andstrcontains lowercase letters separated by a single space.
The Idea: Use a bidirectional map to check for a one to one mapping between each character in the pattern and each word in the sentence.
Complexity: O(n) time and O(2n) space:
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
if len(pattern) != len(str.split()):
return False
chars_word = {}
word_char = {}
for char, word in zip(pattern, str.split()):
if (chars_word.__contains__(char) and chars_word[char] != word)\
or word_char.__contains__(word) and word_char[word] != char:
return False
elif not chars_word.__contains__(char):
chars_word[char] = word
word_char[word] = char
return TrueLast updated
Was this helpful?