LeetCode #290. Word Pattern

题目

290. Word Pattern


解题方法

先把s按照空格分成一个词语列表s_slice,然后看看s_slice的长度是不是和pattern一样,不一样要返回False的。之后设置两个字典dic1和dic2,分别存储s_slice到pattern的映射和pattern到s_slice的映射,如果出现同键不同值的情况就返回False,循环最后还要判断一下两个字典之间的映射是否是相互的,也就是说a->b同样要有b->a,不然就是False了。循环结束都没啥问题的话就可以返回True了。
时间复杂度:O(n)
空间复杂度:O(n)


代码

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        s_slice = s.split(" ")
        if len(s_slice) != len(pattern):
            return False
        
        dic1 = {}
        dic2 = {}
        for i in range(len(s_slice)):
            if s_slice[i] not in dic1:
                dic1[s_slice[i]] = pattern[i]
            else:
                if dic1[s_slice[i]] != pattern[i]:
                    return False
            
            if pattern[i] not in dic2:
                dic2[pattern[i]] = s_slice[i]
            else:
                if dic2[pattern[i]] != s_slice[i]:
                    return False
            
            if dic1[s_slice[i]] != pattern[i] or dic2[pattern[i]] != s_slice[i]:
                return False
        
        return True
posted @ 2020-12-07 15:27  老鼠司令  阅读(54)  评论(0编辑  收藏  举报