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.
思路:和之前的一道题比较像,可以先用split()进行字符串分割,再用zip()方法把两个字符串放到一起 ,然后用set()进行比较.
需要注意的是需要添加and后的条件,否则example4会返回True
class Solution:
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
l = str.split(' ')
return len(set(zip(pattern, l))) == len(set(pattern)) == len(set(l)) and len(pattern) == len(l)
还有就是用字典的方法存储键值对.最后要判断value是否有重复,
class Solution:
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
dic={}
strs = str.split(' ')
if len(pattern) != len(strs):
return False
for char,word in zip(pattern,strs):
if char in dic:
if dic[char] != word:
return False
else:
dic[char]=word
if len(dic.values()) != len(set(dic.values())):
return False
return True