leetcode_290 单词规律

114 阅读1分钟

要求

给定一种规律 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

image.png

解题思路:我们首先先判断模式的长度和字符串分割后的长度是不是相同的,不相同直接否定,相同时,我们会构造一个字典,字典中存储的是规律的字符为键和对应的word为值,先看键在不在,键在,看值和键对应的值是不是相同的,不相同,单词规律不对;若键不在,但是词在,说明,键值对应不上,单词规律不对,都不存在,就将键值存储到字典中,待查;遍历一遍没出毛病就是符合条件。