Word Pattern
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:
abba, str = dog cat cat dog should return true.abba, str = dog cat cat fish should return false.aaaa, str = dog cat cat dog should return false.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.
分析:
按模式匹配給定字符串。
我的做法是,先講模式如“aabb”,構造成模式字典pd={'a':None, 'b':None}。再將給定串如“dog dog cat cat”按空格切分。然後,按順序去對應串和字典中鍵,如果不匹配則不符合該模式。最後,再判斷字典中不同鍵值對應的串是否相同,如果相同,也不符合該模式。
代碼:
class Solution(object):
def wordPattern(self, pattern, str):
:type pattern: str
:type str: str
:rtype: bool
pd = dict(map(lambda a: (a, None), list(pattern)))
slst = str.split()
if len(pattern) != len(slst):
return False
for i in range(len(slst)):
if pd[pattern[i]] is None:
pd[pattern[i]] = slst[i]
else:
if pd[pattern[i]] != slst[i]:
return False
s = set()
for i in pd:
s.add(pd[i])
if len(s) != len(pd):
return False
return True