思想:
题目要求给定一种 pattern(模式)
和一个字符串 str
,判断 str
是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern
里的每个字母和字符串 str
中的每个非空单词之间存在着双向连接的对应模式。
1.首先判断pattern和str.split(" ")长度是否一致,若一致则跳转2,反之返回False
2.其次先通过str.split(" ")将字符串str转换成列表形式['dog', 'cat', 'cat','dog'],然后用set()函数将其转换成无重复元素的字典形式{‘dog’,'cat'},再计算长度
3.zip(a,b)分别从a和b中取一个元素组成一个元组,再次将组成的元组组合成一个新的迭代器。用zip()函数将pattern 和str.split(" ")组合成[(a,'dog'),(b,'cat'),(b,'cat'),(a,'dog')],接着用set()并计算长度
4.最后若三个长度都相等,则返回True 。反之返回False
class Solution:
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
if len(pattern)!=len(str.split(" ")):
return False
a=set(str.split(" "))
b=set(zip(pattern,str.split(" ")))
return len(set(pattern))==len(a)==len(b)