思路:
pattern = "abba", str = "dog cat cat dog"
a b b a
dog cat cat dog
^
i
第一次遇到 a, 加入到 HashMap
HashMap = {a:dog}
a b b a
dog cat cat dog
^
i
第一次遇到 b, 加入到 HashMap
HashMap = {a: dog, b: cat}
a b b a
dog cat cat dog
^
i
HashMap = {a: dog, b: cat}
第二次遇到 b, 判断 HashMap 中 b 的 value 和当前的单词是否符合
符合的话继续判断, 不符合就返回 false
a b b a
dog cat cat dog
^
i
HashMap = {a: dog, b: cat}
第二次遇到 a, 判断 HashMap 中 a 的 value 和当前的单词是否符合
符合的话继续判断, 不符合就返回 false
遍历结束,返回 true
AC
class Solution:
def wordPattern(self, pattern: str, str: str) -> bool:
str_value = str.split(' ')
# patten = 'aaa' str = 'a a a a'
if len(pattern) != len(str_value): return False
dict_p ={}
for i, val in enumerate(pattern):
if val not in dict_p:
# pattern = 'abba' str = 'dog dog dog..' 不能只简单判断key不同,
# key不同时对应的value也必须不同
if str_value[i] not in dict_p.values():
dict_p[val] = str_value[i]
else:
return False
elif dict_p[val] != str_value[i]:
return False
return True
评论题解
def wordPattern(self, pattern: str, str: str) -> bool:
res=str.split()
return list(map(pattern.index, pattern))==list(map(res.index,res))