<h3><a title="题目描述" href="https://leetcode-cn.com/problems/word-pattern">题目描述</a></h3>

<h4>我的解法</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="python">class Solution:
def wordPattern(self, pattern: str, str: str) -> bool:
if not str or not pattern:
return False
arr = str.split(" ")
if len(arr)!= len(pattern):
return False
flag = [[] for _ in range(26)]
self.tmp = ' '
for index,letter in enumerate(pattern):
flag[ord(letter)-97].append(index)
for i in range(len(flag)):
if flag[i]:
if(self.tmp==arr[flag[i][0]]):
return False
self.tmp = arr[flag[i][0]]
for j in range(0,len(flag[i])-1):
if arr[flag[i][j]]!=arr[flag[i][j+1]]:
return False
return True
</pre>
<h4>神仙解法</h4>
<pre class="EnlighterJSRAW" data-enlighter-language="python">def wordPattern(self, pattern: str, str: str) -> bool:
res=str.split()
return list(map(pattern.index, pattern))==list(map(res.index,res))
</pre>
#### Note
- 开数组遍历的解法思想比较简单。看我的代码应该是其义自明的。。(虽然很丑。。。)
- 神仙解法解释一下 主要是用map()函数做映射 然后转成列表判断是否一致就可以了
<pre class="EnlighterJSRAW" data-enlighter-language="python">
>>> pattern = "abba"
>>> str = "dog cat cat dog"
>>> res = str.split()
["dog","cat","cat","dog"]
>>> list(map(pattern.index,pattern))
[0, 1, 1, 0]
>>> list(map(res.index,res))
[0, 1, 1, 0]
</pre>
可以看到map函数根据字符串或者列表来打印出自己想要的映射,这里依据索引值做映射都以第一次遇到该元素的时候为映射值。当然也可以以其他square、count等等做映射
Leetcode290 单词规律