LeetCode #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