给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
思路:双向映射
#-*- coding = utf-8 -*-
#@Time : 2020/12/16 12:34
#@Author :Anq1
#@File : wordPattern.py
#@Software : PyCharm
def wordPattern(pattern: str, str: str) -> bool:
str_2_list = str.split(' ')
if len(pattern) != len(str_2_list):
return False
hashmap = dict() # 双向映射 pattern:string
seen = set() # 看string是否出现过
for p, string in zip(pattern, str_2_list):
if hashmap.get(p, None): # 判断pattern对应的str是否和当前一致
if hashmap.get(p) != string:
return False
else: # 如果pattern没有出现过
if string in seen: # 但string出现过
return False
else:
hashmap[p] = string
seen.add(string)
return True
print(wordPattern(pattern = 'aabb',str = 'dog dog cat cat'))
注:
Zip()函数
在PY2中,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
PY3中返回的是一个对象,需要列表的话要list转换。