Word Pattern
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
.
Examples:
pattern = "abba"
, str = "dog cat cat dog"
should return true
.
pattern = "abba"
, str = "dog cat cat fish"
should return false
.
pattern = "aaaa"
, str = "dog cat cat dog"
should return false
.
pattern = "abba"
, str = "dog dog dog dog"
should return false
.
Notes:
You may assume pattern
contains only lowercase letters, and str
contains lowercase letters separated by a single space.
Tags
- String
- Hashmap
Thought
Use the hashmap to represent the mapping relation between the pattern
string and the str
string. The process is almost the same to the Isomorph Strings.
Code
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
patternList = list(pattern)
strList = str.split(' ')
if len(patternList) != len(strList):
return False
sourceMap, targetMap = dict(), dict()
for i in xrange(len(patternList)):
source = sourceMap.get(strList[i], None)
target = targetMap.get(patternList[i], None)
if source is None and target is None:
sourceMap[strList[i]] = patternList[i]
targetMap[patternList[i]] = strList[i]
elif source != patternList[i] or target != strList[i]:
return False
return True