要求
给定一种规律 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 包含了由单个空格分隔的小写字母。
核心代码
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
sstr = s.split(" ")
if len(sstr) != len(pattern):
return False
dic = {}
for i in range(len(pattern)):
if pattern[i] in dic:
if dic[pattern[i]] != sstr[i]:
return False
elif sstr[i] in dic.values():
return False
else:
dic[pattern[i]] = sstr[i]
return True
解题思路:我们首先先判断模式的长度和字符串分割后的长度是不是相同的,不相同直接否定,相同时,我们会构造一个字典,字典中存储的是规律的字符为键和对应的word为值,先看键在不在,键在,看值和键对应的值是不是相同的,不相同,单词规律不对;若键不在,但是词在,说明,键值对应不上,单词规律不对,都不存在,就将键值存储到字典中,待查;遍历一遍没出毛病就是符合条件。