题目:
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.
题意:
如上所述,注意,模式只包含小写字母,分隔符是空格。
方法一:性能58ms
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
s = str.split(' ')
if len(pattern) != len(s):
return False
h = {}
mapval = []
for i in range(len(pattern)):
if pattern[i] in h:
if h[pattern[i]] != s[i]:
return False
else:
if s[i] in mapval:
return False
h[pattern[i]] = s[i]
mapval.append(s[i])
return True
方法二:性能32ms
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
d = {}
d1 = {}
l = str.split(" ")
if len(l) != len(pattern):
return False
for i in range(len(pattern)):
if pattern[i] not in d:
d[pattern[i] ] = l[i]
if l[i] not in d1:
d1[l[i]] = pattern[i]
else:
return False
else:
if l[i] != d[pattern[i]]:
return False
return True